输出疑惑!

bornunique 2008-11-28 08:56:51
If the content of a file (input.txt) is
----------------
abc
def
--------------------------
And the following program is executed to take input from the file:
-------------------------
char input[100],ch;
int main(void)
{
freopen("input.txt","rb",stdin);
scanf("%s",&input);
scanf("%c",&ch);
cout<<input<<'\n';
cout<<input<<'\n';
cout<<input<<ch;
cout<<input<<'\n';

return 0;
}
为什么输出是:
abc
abc
abc
仅有三行,而我认为ch='\n',所以应该是四行abc输出啊?
急求指导!
...全文
152 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bornunique 2008-11-28
  • 打赏
  • 举报
回复
楼上说的很对 就是这个原因!
kiffa 2008-11-28
  • 打赏
  • 举报
回复
看来似乎是回车和换行的区别:

Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车 ><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。

所以你的代码中ch = '\r',然后cout << input << ch;这条语句打印出 abc'\r',windows下的‘\r'即跳转到行首。然后接下去又是一条cout << input << '\n';这条语句从第三行的行首开始输出,结果覆盖掉了第三行的abc,所以最终只有3行。

以上为个人推测,手头没有win编译器,无法测试。

你可以试试这样:

cout <<input <<ch; 
cout <<"haha" <<'\n';


看看最终结果是不是输出2行abc,第三行是haha。
filec75 2008-11-28
  • 打赏
  • 举报
回复
帮顶
bornunique 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kiffa 的回复:]
在我机器上测试了一下,输出结果是4行abc。。。
[/Quote]
你是Linux或Unix的机子吧?
Linux或Unix下是你的情况!
但windows下不一样
bornunique 2008-11-28
  • 打赏
  • 举报
回复
搞清楚了,ch的int值为13,为carriage Return,而'\n'的ascii码为10是line feed.
就呆在云上 2008-11-28
  • 打赏
  • 举报
回复
char input[100],ch; 
int main(void)
{
FILE *fp = freopen("readme.txt","rb",stdin);
scanf("%s",&input);
scanf("%c",&ch);

// cout <<input <<'\n';
// cout <<input <<'\n';
// cout <<input <<ch;
// cout <<input <<'\n';
fprintf(stdout, "\n%s %c ",input,ch);
fprintf(stdout, "\n%s %c ",input,ch);
fprintf(stdout, "\n%s %c ",input,ch);
fprintf(stdout, "\n%s %c ",input);
fclose(fp);
return 0;
}


问题出在,这个ch的读取的时候什么都问题,是一个不存在的东西,因为前面的获取字符串已经把所有可以读的东西都读光了,ch得到了一个看不见的东西,而且还留在缓冲里面的在后面有输出的时候,这个不存在的字符会刷掉一个空格
如果后面没有输出了,他会刷掉一行,替代的是一个空格
因此这里会有这个问题。
因此把两个scanf换一下,让ch和input都得到一点东西呵呵
char input[100],ch; 
int main(void)
{
FILE *fp = freopen("readme.txt","rb",stdin);
scanf("%c",&ch);
scanf("%s",&input);
cout <<input <<'\n';
cout <<input <<'\n';
cout <<input <<ch;
cout <<input <<'\n';
fclose(fp);
return 0;
}


这样就没有关系了
guanyin_2008 2008-11-28
  • 打赏
  • 举报
回复
或者ch='\r',即 cout<<(int)ch;的值为13,才可能出现你那样的输出
kiffa 2008-11-28
  • 打赏
  • 举报
回复
1楼估计你写成了
scanf("%c", ch);
少了个 &
kiffa 2008-11-28
  • 打赏
  • 举报
回复
在我机器上测试了一下,输出结果是4行abc。。。
guanyin_2008 2008-11-28
  • 打赏
  • 举报
回复
你试一下
cout<<(int)ch;
看是否为 0;
ch里面可能是个空字符

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧