c语言换行为什么输出两行空行?

程序如下:#include<stdio.h>intmain(){chara;while(scanf("%c",&a)){if(a=='#')break;else{prin... 程序如下:
#include<stdio.h>
int main(){
char a;
while(scanf("%c",&a)){
if(a=='#')
break;
else{
printf("%c\n",a);
}

}
return 0;

}
若没有换行符则不换行,可是加上后输出两行空行。高手指教下~~
展开
 我来答
magmagic
推荐于2017-12-16 · TA获得超过435个赞
知道小有建树答主
回答量:293
采纳率:0%
帮助的人:380万
展开全部
比如你输入 5 + 回车
本来是想 scanf 一个字符 '5'
但程序在读入5以后,把你输入的回车也读进去了
就是说“ 5 + 回车 ”这样一次输入,读入了2个字符,执行了2次循环
第二次循环中字符 '\n' 作为 %c 被输出了,所以你会感觉多了一行
scanf就是这个特点,修改一下程序便可解决:

#include<stdio.h>

int main(){
char a;
while(scanf("%c",&a))
{
if(a=='#') break;
else
{
if(a!='\n') printf("%c\n",a);
}
}
return 0;
}
xoaxa
推荐于2016-05-14 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3468万
展开全部
这是误解,问题可能出在用gets()或fgets()读入的字符串输出的时候。比如
char s[100]; // 声明一个字符数组
gets(s); // 用 I like C/C++ language. 作为响应,此时的输入完字符串的新行符也被读入
puts(s); // puts()会在显示完字符串后,添加一个新行符。也就是说有两个新行符被输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
知音先锋6110
2012-06-26
知道答主
回答量:13
采纳率:0%
帮助的人:8万
展开全部
先用w方式重新写一下文件 因为添加的东西可能比较乱
然后主意 写文件的时候不要添加“\n” 添加这个就会导致feof(fp) 识别不了 就重新读最后一行 所以 只要删了“\n"就0k了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ghost1357
2010-03-05 · 超过28用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:78.3万
展开全部
#include<stdio.h>
int main(){
char a;
while(scanf("%c",&a)){
if(a=='#')
break;
else{
printf("%c\n",a);
getchar(); //添加getchar()获得末尾的换行
}

}
return 0;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式