C语言新手:关于getchar()的位置问题

题目是输入一行字符,分别统计出其中英文字母,空格,数字,和其他字符的个数。下面这个程序是我自己写的: #include <stdio.h> void main() { int a,b,c,d; char m; m=getchar(); a=b=c=d=0; for(;m!='\n';) { if(m>='a'&&m<='z'||m>='A'&&m<='Z') a++; else if(m>='0'&&m<='9') b++; else if(m==' ') c++; else d++; } printf("字母有%d个\n",a); printf("数字有%d个\n",b); printf("空格有%d个\n",c); printf("其他有%d个\n",d); } 编译调试都没错,但是运行得到的结果全都是0,后来我把getchar()放到for()里面,就是for(;m=getchar()!='\n'),运行之后得到的结果还是不对,再后来对照网上的把getchar()放入for的循环结构里面事先声明,结果就差不多了。 我的问题有两个: 1.为什么getchar()必须放在这个位置。 2.运行时“其他”项总是比我输入的个数要多1,这是什么原因,是我程序有问题还是他把其他回车什么的也算在内了? 希望高手帮忙指点一下,感激不尽!

你的第一个问题:因为你要不停的统计输入的字符再判断,所以getchar必须放在循环体里面,否则没有意义。
你的第二个问题:因为你按下回车后
也算一个输入。我修改了你的程序如下:
#include
<stdio.h>
main()
{
int
a,b,c,d;
char
m;
a=b=c=d=0;
while(1)
{
m=getchar();
if(m>='a'&&m<='z'||m>='A'&&m<='Z')
a++;
else
if(m>='0'&&m<='9')
b++;
else
if(m=='
')
c++;
else
if(m=='\n')
break;
else
d++;
}
printf("字母有%d个\n",a);
printf("数字有%d个\n",b);
printf("空格有%d个\n",c);
printf("其他有%d个\n",d);
}
我测试没有问题
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言新手:关于getchar()的位置问题
你的第一个问题:因为你要不停的统计输入的字符再判断,所以getchar必须放在循环体里面,否则没有意义。你的第二个问题:因为你按下回车后 也算一个输入。我修改了你的程序如下:include <stdio.h> main(){ int a,b,c,d;char m;a=b=c=d=0;while(1){ m=getchar();if(m>='a'&&m<=...

C语言新手:关于getchar()的位置问题
你的第一个问题:因为你要不停的统计输入的字符再判断,所以getchar必须放在循环体里面,否则没有意义。你的第二个问题:因为你按下回车后 也算一个输入。我修改了你的程序如下:include <stdio.h> main(){ int a,b,c,d;char m;a=b=c=d=0;while(1){ m=getchar();if(m>='a'&&m<=...

c语言问题 getchar位置不同输出时格式也不同 这是为什么
因为放前面时,它刚好把scanf遗留在缓冲区里的'\\n'接收了,下面的a就是你输入的值。改放后面后,那个遗留在缓冲区里的'\\n'被a=getchar()收取并赋给了a,那个2后面的空行就是第一次输出的a,它是个'\\n',所以空了一行。

c语言中getchar()函数的用法是什么啊?
一、问题描述:从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。1、输入:第一行是一个字符串; 第二行是一个字符。2、输出:删除指定字符后的字符串。二、设计思路:1、 同插入问题,定义两个字符数组a,b。以及标志删除位置的int型pos。2、用gets函数...

C语言的getchar用法疑问
加上括号,就是c = getchar(), c != '\\n";不加括号就是 getchar()!='\\n' 这个表达式的值只有2个要么1要么0,然后赋值给c。c的值永远是0或者1,表示为ASCII码的不可打印字符,换句话说,不管你输入多少,它只会显示 other的个数。观楼主英俊潇洒,风流倜傥,必当世豪杰,大侠闲暇之余...

C语言getchar()问题,耐心的进
对你的第一个问题:int ch1=getchar();int ch2=getchar();int ch3=getchar();在你输入9回车6回车,那么此时缓冲区的字符数据为入 9回车6回车(实际上计算机认为你输入的是字符9和6,因为getchar是针对字符的,由于你定义的是int型,因此计算机会自动转换为它的ASC码,也就是一个整数,再你输出...

C语言getchar()简单问题!
EOF是end of file文件尾的意思 在C语言中,EOF是个宏,表示-1 当getchar()函数操作出现“错误”时会返回 EOF , c != EOF 表示读到一个有效的字符,会循环 一般在windows下,空行位置键入ctrl+z回车,会跳出循环

关于C语言getchar()的问题
这种情况多见于在上次输入完成时按了回车键,所以产生了一个回车符('\\n'或者'\\r'),这个字符没有被i=getchar()之前的读取操作读取,所以到了这里系统不会再次等待用户从键盘输入(因为缓冲区中还有字符),而会直接把这个回车符读取。为避免这种情况,可以在getchar()之前用fflush(stdin);来一次性...

问一个c语言关于getchar()的问题
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCⅡ码,如出错返回-1,且将用户...

C语言 ,这个错什么地方了getchar()
char c;c=getchar();删掉.include<stdio.h> 类似于这种放在文件首 另外,函数以外,可以有声明,可以定义变量时赋初值,但是不能有其它语句,而且...你这还是调用了函数...

相似回答
大家正在搜