int main()
{
int c,nl,nt,Blanks;
nl = 0;
nt = 0;
Blanks = 0;
while ((c= getchar()) != '5'){
if (c ='\n')
nl++;
if(c='\t')
nt++;
if(c = 's')
Blanks ++;
}
printf("No of lines is %d \n No of tabs %d \n and no of blanks %d \n",nl,nt,Blanks);
return 0;
输出:
No of lines is 12
No of tabs 12
and no of blanks 12
RUN SUCCESSFUL (total time: 5s)
输出是输入的任意字符的数量,并且根本不区分它们。另外,当我使用 EOF 使循环在到达文件末尾时停止时,循环没有停止并且程序继续运行。
最佳答案
在 C 语言中,使用 =
进行赋值,例如。
x = 5;
并使用==
进行比较。例如。
if (x == 5) { /* do something */ }
如果你用错了,例如。
if (x = 5) { /* do something */ }
这将导致分配,而不是比较。表达式 x = 5
始终为 true
,因为 x
为非零,非零与 相同在 C 中为 true
。这意味着 /* do some */
将始终被执行。
另外,'5'
并不代表EOF
,它代表的是字符5
。您应该将 '5'
替换为 EOF
。
while ((c = getchar()) != EOF)
除此之外,您似乎正在使用 's'
测试空格 (' '
)。这是错误的。 's'
表示 C 中的字符 s
。 ' '
表示 C 中的空格
字符。
还有一些建议:这与问题没有直接关系,但由于您显然是 C 语言新手,所以我会给您一个重要的指导。
切勿使用不带大括号的 if
语句。例如。
if (/* condition */)
/* do something */
相反,使用
if (/* condition */) {
/* do something */
}
我知道它更长,但稍后您可能会决定添加另一行代码,例如。
if (/* condition */)
/* do something */
/* do something else */
你会很困惑为什么 /* do something else */
总是总是执行,天气 /* condition */
是否为 true
。
关于c - 行、选项卡 ,'s' 计数问题和 EOF 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844504/