scanf不等待输入问题求助:程序反复输出Bigger的原因及解决方法
问题分析与修复方案
嘿,我一眼就揪出问题所在啦!咱们一步步来看:
为什么程序一直输出"Bigger",完全不等你输入?
核心问题出在你用错了scanf的格式符!你写的%n根本不是用来读取整数的——它的作用是统计scanf到目前为止已经成功读取的字符个数,完全不会等待用户输入内容!
你初始化了n=0,每次调用scanf("%n", &n)时,因为没有需要匹配的输入格式,它直接把当前读取的字符数(这里是0,啥都没读)赋值给n。而rand()生成的随机数几乎肯定大于0,所以n < rn永远成立,程序就会无限循环输出"Bigger",完全不会理你的输入操作。
修复后的代码&关键改动
我给你改了两个地方,保证程序正常运行:
- 把
scanf的格式符从%n改成%d——这才是读取整数输入的正确格式; - 加了
srand(time(NULL))初始化随机数种子,不然每次运行程序生成的随机数都是一模一样的,玩猜数字游戏就没意义啦~
修复后的完整代码:
#include <stdio.h> #include <time.h> #include <stdlib.h> // 别忘了加这个头文件,rand和srand都依赖它 int main(){ int rn, n=0; srand(time(NULL)); // 初始化随机数种子,让每次运行的随机数不同 rn = rand(); while (n != rn){ scanf("%d", &n); // 换成%d,正常读取用户输入的整数 if (n < rn) printf("\nBigger\n"); else if (n > rn) printf("\nSmaller\n"); } printf("\nCorrect\n"); return 0; }
额外小科普
%n这个格式符平时很少用到,属于偏门用法:它不会消耗输入流里的内容,只是默默记录到当前为止scanf已经读取了多少个字符。比如你写scanf("hello%d%n", &num, &count),当输入"hello123"时,count会被赋值为8("hello"5个字符+"123"3个字符)。
内容的提问来源于stack exchange,提问作者Chop
相关产品推荐
相关产品推荐

