未编写printf的C程序出现输入重复输出的异常问题咨询
问题原因
这根本不是程序的输出,全是终端输入回显机制闹的误会。
你的代码里确实没有任何输出语句,不管手动输入还是粘贴输入,程序都不会输出半句话。之所以粘贴时看起来有重复内容,是因为:
- 手动输入时,你敲一行回车一行,终端会立刻把你敲的内容显示出来(这叫回显),但程序只是默默读走这些内容,等程序跑完,终端提示符出来,你不会觉得有“额外输出”;
- 粘贴输入时,终端会一次性把所有粘贴的内容塞进输入缓冲区,同时终端的回显功能也会把这些内容显示出来。加上程序读取输入的节奏和粘贴的显示时机撞在一起,看起来就像是程序重复输出了输入内容——但实际上你看到的全是终端自己显示的输入内容,程序啥也没输出。
解决方法
如果想彻底搞明白,或者避免这种混淆,有两个办法:
- 关闭终端回显(Linux/Unix环境):在程序开头关掉终端的回显功能,结束前再恢复,这样终端就不会显示你输入的内容,你就能明确看到程序真的没输出:
#include <stdio.h> #include <stdlib.h> char s[50]; int n,i; int main(){ system("stty -echo"); // 关闭输入回显 scanf("%d",&n); for (i=0;i<n;i++){ scanf("%s",s); } system("stty echo"); // 恢复回显 return 0; }
- 主动添加输出(如果需要的话):要是本来就想让程序输出内容,直接在每次
scanf之后加printf("%s\n", s);,这样你看到的就是程序主动输出的内容,不会和终端回显混在一起。
内容的提问来源于stack exchange,提问作者Elvin Qarayev
相关产品推荐
相关产品推荐

