无限 while 循环代码正在打印 2 个“hello's”而不是一个 hello,其中代码从用户那里获取输入以检查字符如果是 n 个循环中断

问题描述

#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;
}