学c语言两年了,还搞不懂这个问题。
以前学过一段时间,后来很长一段时间没碰过了,于是就忘记了很多,现在又开始看书,看到这个地方一直不明白。哪位高手能帮忙解释下?
#include<stdio.h>
#include<ctype.h>
main()
{
char ch, ch1;
while (1)
{
printf("input the character('q' to quit):");
ch = getchar(); /*从键盘中获得一个字符*/
ch1 = getchar(); /*ch1接收从键盘中输入的回车*/
if (ch == 'q' || ch == 'Q')/*判断输入的字符是不是q或Q*/
break;/*如果是q或Q跳出循环*/
if (isalpha(ch))/*检测输入的是否是字母*/
printf("\n%c is a letter.\n\n", ch);
else
printf("\n%c is not a letter.\n\n", ch);
}
}
为什么要定义一个ch1?getchar不是每次只可以读取一个字符吗?我把ch1 = getchar(); 这句删除后运行程序,输入jkl,结果输出j is a letter,k is a letter,l is a letter, is a letter,4句。getchar不是每次只读取一个字符吗?我输入j之后为什么还会继续读入k,l,和回车符?
[解决办法]
输入必须有结束标志,要不计算机不知道是否输入完成,回车就是完成标志。但是每次只取一个字符,所以显示了4次
[解决办法]
你的程序是循环的啊,getchar虽然一次只读取一个,但是多输入的字符会留在缓冲区里等待下一次读取。当你下一次执行到getchar里时,如果缓冲区里有内容会直接读取,而不需要你再输入。你输入了 jkl回车 4个字符,所以就执行了4次,没什么问题。
至于是否定义ch1就没必要了,本身并没有什么用处。一般回车符是要被吸收掉的,建议加getchar()。不过如果你加了这句 你一次输入很长的字符串 那么内容会被间隔,要注意下。比如 abcd回车,其实只吸收了ac回车。
[解决办法]
缓冲区有一个会回车符阿!每次重新输入的时候,第一个会吃掉上次遗留下来的回车符的!
所以额外加一个getchar(),来确定下一次输入的正确性!
[解决办法]
getchar是用来读取输入缓冲区里面的一个字符。你输入的q是一个字符,回车也是一个字符。所以,你要用ch1 = getchar(); 去读取这个回车字符,免得ch读取了这个回车字符。
[解决办法]
你要知道系统是有一个键盘缓冲区的。对于控制台一般是行缓冲,也就是遇到回车键,就刷新缓冲区。只有在刷新缓冲区的时候你的代码才会接收到一个个的字符,包括回车键。
[解决办法]
#include <conio.h>
#include <ctype.h>
int main() {
char ch;
while (1) {
cprintf("input the character('q' to quit):");
ch = getch();
if (ch == 'q'
[解决办法]
ch == 'Q') break;
if (isalpha(ch))
cprintf("\r\n%c is a letter.\r\n", ch);
else
cprintf("\r\n%c is not a letter.\r\n", ch);
}
return 0;
}
#include<stdio.h>
int main()
{
getchar();
//fflush(stdin);
getchar();
return 0;
}