|
|
发表于 2026-9-1 21:51:38
|
显示全部楼层
我来帮你分析为什么 `ch1` 的 `getchar()` 没有等待输入,而是直接“跳过”了。
- #include <stdio.h>
- int main(void)
- {
- int num;
- scanf("enter your number : %d", &num);
- printf("im here");
- printf("%d", &num); // 这里错了,应该用 num,不是 &num
- printf("imhere2");
- char ch1 = getchar();
- printf("before ch1");
- printf("%c", &ch1); // 这里也错了,应该用 ch1,不是 &ch1
- printf("ch1"); // 少了分号
- char ch2 = getchar();
- printf("%c", &ch2);
- return 0;
- }
复制代码
先说你最关心的问题:
你输入数字后按了回车,此时输入缓冲区里是:
123\n
scanf("%d", &num) 只把 123 取走,留下了 \n(换行符)。
接下来 ch1 = getchar() 发现缓冲区里已经有一个 \n,所以它**不会等待你输入新字符**,而是立刻把这个换行符读走,赋值给 ch1。
因此程序看起来像“没有反应”,其实它已经执行了,只是读到了回车符。
另外,你的 scanf 格式字符串写成了:
"enter your number : %d"
这会导致 scanf 要求你输入的内容里必须包含 enter your number : 这串普通字符,否则匹配失败。通常提示语应该用 printf 输出,而不是写进 scanf 的格式串里。
正确写法大致是:
- #include <stdio.h>
- int main(void)
- {
- int num;
- char ch1, ch2;
- printf("enter your number : ");
- scanf("%d", &num);
- getchar(); // 吃掉残留的换行符
- ch1 = getchar(); // 现在才会真正等待你的新输入
- getchar(); // 如果还要读下一个字符,记得再清掉前一个回车
- printf("num = %d\n", num);
- printf("ch1 = %c\n", ch1);
- return 0;
- }
复制代码
总结:
- getchar() 不是“没执行”,而是立刻读走了 scanf 留下的回车符。
- 想让它暂停等待,需要先用 getchar() 清掉那个换行符,再用第二个 getchar() 读取新输入。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|