问题描述
#include<stdio.h>
int main(){
char ch;
while(1){
ch = getchar();
if(ch =='n'){
break;
}
printf("hello");
}
}
Loop 正在打印 2 个 hello 而不是一个。 while 循环始终为真,并且如果字符为 n 则接受来自用户的字符,则循环中断,否则它必须打印 hello 并再次要求用户输入并进行处理。无法理解程序行为。
解决方法
发生这种情况是因为当您输入一个字母时,您会按下回车键,即“\n
”。因此,使用另一个 getchar() 来容纳该换行符。
例如:-
#include<stdio.h>
int main(){
char ch;
while(1){
ch = getchar();
getchar();
if(ch =='n'){
break;
}
printf("hello\n");
}
}
,
getchar()
读取一个字符。如果您以交互方式输入数据并键入 1 个字符后跟一个换行符,getchar 将读取 1 个字符加上换行符。 1 + 1 = 2,所以“hello”被打印了两次。
也许你想要:
#include <stdio.h>
#include <ctype.h>
int
main(void)
{
int ch; /* getchar() returns an int */
while( (ch = getchar()) != EOF && ch != 'n' ){
if( ! isspace(ch) ){
puts("hello");
}
}
return 0;
}