You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scanf不等待输入问题求助:程序反复输出Bigger的原因及解决方法

问题分析与修复方案

嘿,我一眼就揪出问题所在啦!咱们一步步来看:

为什么程序一直输出"Bigger",完全不等你输入?

核心问题出在你用错了scanf的格式符!你写的%n根本不是用来读取整数的——它的作用是统计scanf到目前为止已经成功读取的字符个数,完全不会等待用户输入内容!

你初始化了n=0,每次调用scanf("%n", &n)时,因为没有需要匹配的输入格式,它直接把当前读取的字符数(这里是0,啥都没读)赋值给n。而rand()生成的随机数几乎肯定大于0,所以n < rn永远成立,程序就会无限循环输出"Bigger",完全不会理你的输入操作。

修复后的代码&关键改动

我给你改了两个地方,保证程序正常运行:

  1. 把scanf的格式符从%n改成%d——这才是读取整数输入的正确格式;
  2. 加了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:58:36