输入完之后 按回车键一直没反应 一直不断向下回车

#为什么输入完之后 按回车键一直没反应 一直不断向下回车 始终不进行运算

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

img

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语言中输入完之后按回车键一直没反应的问题的两种方法。任选其中一种即可解决该问题。



【相关推荐】



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