输入字符后回车没反应

img

在输入字符后回车 程序没反应 直接跳到下一行 还可以继续输入 请各位帮忙看看👀

你scanf写了死循环

因为结束循环,需要按下在新的一行按下CTRL+Z,然后回车,输入回车也是按正常字符读入字符数组,而按下CTRL+Z可以产生EOF信号,然后scanf()会停止获取输入。

修改如下:

参考链接:


c语言scanf返回值_c语言中scanf的返回值是什么意思_西红柿爱炒番茄的博客-CSDN博客 1. scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b); 如果用户输入"3 4",可以正确输入,返回2(正确输入了两个变量); 如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。 2) 0,表示用户的输入不匹配,无法正..._c语言中scanf的返回值是什么意思 https://blog.csdn.net/qq_36561697/article/details/81155146


#include <stdio.h>

int main(void){
    
    char ch[254];
    int i=0;
    
    // https://blog.csdn.net/qq_36561697/article/details/81155146
    // https://blog.csdn.net/qq_36561697/article/details/81155146
    // 可以在新的一行开始,按下CTRL+Z,然后回车来结束输入 1
    while(scanf("%c",&ch[i])==1){        
        i++;        
    }
    
    i--; //去除最后一次没有读入的字符 
    while(i>=0){
        printf("%c",ch[i]);
        i--;
    }

//    for(int j=0;j<i;j++){
//        printf("ch[%d]=%c,%d\n",j,ch[j],ch[j]);
//    }
    
    return 0;
} 

img

【以下回答由 GPT 生成】

问题的关键出在使用了scanf函数来获取输入字符。scanf函数默认会忽略换行符(回车键产生的字符)并保留在输入缓冲区中,导致后续的scanf函数调用会直接读取到换行符并继续执行。

要解决这个问题,可以按以下几个步骤进行处理:

  1. 使用getchar函数来获取输入字符,而不是scanf函数。getchar函数会直接读取输入缓冲区中的字符,包括换行符。
  2. 修改代码中的循环条件,使其在遇到换行符时退出循环。可以通过检查输入字符是否是换行符('\n')来实现。修改循环条件为while((ch[i] = getchar()) != '\n')
  3. 如果你希望在每次输入完字符后立即执行相应的逻辑,可以将逻辑代码放在循环内部。例如,你可以在每次输入字符后判断该字符是否是换行符,并在不是换行符时执行相应的逻辑。

下面是修改后的代码示例:

#include<stdio.h>

int main(void) {
    char ch[254];
    int i=0;

    while((ch[i] = getchar()) != '\n') {
        printf("%c",ch[i]);

        // 在这里执行相应的逻辑

        i=i+1;
    }

    return 0;
}

这样修改后,当你输入一个字符并按下回车键时,程序将会打印该字符并立即执行相应的逻辑。之后,你可以继续输入下一个字符。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^