在输入字符后回车 程序没反应 直接跳到下一行 还可以继续输入 请各位帮忙看看👀
你scanf写了死循环
因为结束循环,需要按下在新的一行按下CTRL+Z,然后回车,输入回车也是按正常字符读入字符数组,而按下CTRL+Z可以产生EOF信号,然后scanf()会停止获取输入。
修改如下:
参考链接:
#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;
}
【以下回答由 GPT 生成】
问题的关键出在使用了scanf
函数来获取输入字符。scanf
函数默认会忽略换行符(回车键产生的字符)并保留在输入缓冲区中,导致后续的scanf
函数调用会直接读取到换行符并继续执行。
要解决这个问题,可以按以下几个步骤进行处理:
getchar
函数来获取输入字符,而不是scanf
函数。getchar
函数会直接读取输入缓冲区中的字符,包括换行符。'\n'
)来实现。修改循环条件为while((ch[i] = getchar()) != '\n')
。下面是修改后的代码示例:
#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;
}
这样修改后,当你输入一个字符并按下回车键时,程序将会打印该字符并立即执行相应的逻辑。之后,你可以继续输入下一个字符。
【相关推荐】