C语言编程:使用goto语句实现重复运行时scanf不接收输入问题
问题根因
- 当你使用
scanf("%d")读取整数时,仅会提取输入流中的数字内容,用户输入结束按下回车产生的换行符\n会残留在输入缓冲区中。 %c格式符的默认行为是不跳过任何空白字符(包括换行符、空格、制表符),所以后续执行scanf("%c", &looping)时,会直接读取到缓冲区中残留的换行符,不会等待用户主动输入,因此看起来就像这条语句被忽略了。
修复方案
最简单的修复方式是在读取字符的%c前添加一个空格,修改对应scanf语句为:
scanf(" %c", &looping);
格式符前的空格会指示scanf自动跳过输入流中所有前置的空白字符,就能正常读取用户输入的Y/N字符了。
你也可以选择在每次读取完整数后,手动清空输入缓冲区,避免残留内容干扰后续输入:
// 放在第二个scanf("%d", &num2);之后执行 while (getchar() != '\n');
修复后完整代码
#include <stdio.h> int main() { int num1, num2; char looping; AGAIN: printf("ENTER FIRST NUMBER FOR ADDITION\n"); scanf("%d", &num1); printf("ENTER SECOND NUMBER FOR ADDITION\n"); scanf("%d", &num2); printf("ADDITION OF TWO NUMBERS IS %d\n", num1 + num2); printf("DO YOU WANT TO RUN LOOP AGAIN ?\nENTER Y FOR YES AND N FOR NO\n"); // 格式符前加空格跳过前置空白字符 scanf(" %c", &looping); if (looping == 'Y' || looping == 'y') { goto AGAIN; } else { goto EXIT; } EXIT: printf("EXITING"); return 0; }
内容的提问来源于stack exchange,提问作者user17369326
相关产品推荐
相关产品推荐

