我是C的初学者。我正在尝试打印用户输入的字符串中的长度和单词数。我在处理单词计数方面遇到了麻烦。我尝试扫描空格字符的编号,然后在结果中添加1。保证每个单词只用一个空格分隔。
我执行了代码,并输入了
I go to school by bus.
第二个输出不是我预期的
22
24
22
是正确的,因为它确实是字符串的长度,但我不明白为什么它打印24
而不是6
(5个空格加1的结果)。< / p>
代码如下
#include<stdio.h>
#include<string.h>
int main(){
char in[256];
int cl=0,cw,i;
scanf("%[^\n]",&in);
cw=strlen(in);
for(i=0;i<=cw;i++){
if(in[i]=' '){
cl=cl+1;
}
}
printf("%d\n",cw);
printf("%d\n",cl+1);
return 0;
}
出了什么问题,我怎样才能得到正确的输出?
答案 0 :(得分:4)
if(in[i]=' '){
永远是真的,您需要将其更改为
if(in[i]==' '){
答案 1 :(得分:4)
我在你的代码中看到的2个错误。
if(in[i]=' ')
应为if(in[i]==' ')
==
检查两个操作数的值是否相等。如果是,则条件成立。
=
简单赋值运算符。将右侧操作数的值分配给左侧操作数。
i<=cw
应为i<cw
索引在C中从0开始。
答案 2 :(得分:2)
正如Pras所说,如果您通常使用==,因为您正在比较并返回true或false 如果您只是使用= it属性(插入)左侧右侧的值。
答案 3 :(得分:0)
您应该在检测空间的if语句中使用==而不是=。
如果数字被赋值为非零值,赋值运算符,= give始终为true。
等价运算符,==实际上是比较两个数字是否具有相同的值。
可能令人惊讶的是,赋值运算符实际上可以测试一个数是否为零(至少在x860上。这是因为jz,其中一个测试指令,检查一个称为标志寄存器的东西(一个特殊的存储位置)它包含有关最近执行的算术运算的信息。==执行一个cmp,它相互减去两个数字以查看它是否为0. Jz代表“如果为零则跳转”,因此两个相等的数字导致“跳转” if语句中的指令。当使用=时,编译器使用jz代替(为了符合if中的非零数字为if的想法),这导致上述行为。