#为什么输入完之后 按回车键一直没反应 一直不断向下回车 始终不进行运算
#include <stdio.h>
//输入一个整型数,存入变量i,通过子函数change把主函数的变量i除2,然后打印i,例如如果输入的为10,打印出5,如果输入的为7,打印出3
void change(int *j)
{
*j=*j/2;
}
int main() {
int i,p;
scanf("%d\n",&i);
change(&i);
fflush(stdout);
printf("%d\n",i);
return 0;
}
scanf那句内部的斜杠n删除掉,
scanf("%d\n",&i);
->
scanf("%d",&i);
scanf("%d\n",&i);
表示需要 輸入 數字+回车键 以及 任何非空白+回车键,
所以應該改為:
scanf("%d",&i);
【以下回答由 GPT 生成】
问题的关键在于代码中的scanf
函数。scanf
在读取输入时会忽略空格、制表符和换行符,直到读取到非空白字符为止。在代码中,scanf
的格式字符串为"%d\n"
,这表示需要读取一个整数,然后跳过一个换行符。
解决这个问题可以有两种方法:
方法一:去掉scanf格式字符串中的换行符
将scanf
的格式字符串"%d\n"
修改为"%d"
,即去掉换行符,这样当输入完数字后按下回车键就可以得到预期的结果了。
scanf("%d", &i);
方法二:手动处理输入中的剩余换行符
在输入完数字后,可以手动处理输入缓冲区中的剩余换行符,这样就能继续执行后续的代码。
#include <stdio.h>
void change(int *j)
{
*j = *j/2;
}
int main() {
int i, p;
scanf("%d", &i);
while (getchar() != '\n'); // 手动处理输入中的剩余换行符
change(&i);
fflush(stdout);
printf("%d\n", i);
return 0;
}
在上述代码中,while (getchar() != '\n');
会一直读取输入缓冲区中的字符,直到遇到换行符为止。
以上就是解决在C语言中输入完之后按回车键一直没反应的问题的两种方法。任选其中一种即可解决该问题。
【相关推荐】