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

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

}
return 0;

}
若没有换行符则不换行,可是加上后输出两行空行。高手指教下~~

比如你输入 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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-05-14
这是误解,问题可能出在用gets()或fgets()读入的字符串输出的时候。比如
char s[100]; // 声明一个字符数组
gets(s); // 用 I like C/C++ language. 作为响应,此时的输入完字符串的新行符也被读入
puts(s); // puts()会在显示完字符串后,添加一个新行符。也就是说有两个新行符被输出。
第2个回答  2012-06-26
先用w方式重新写一下文件 因为添加的东西可能比较乱
然后主意 写文件的时候不要添加“\n” 添加这个就会导致feof(fp) 识别不了 就重新读最后一行 所以 只要删了“\n"就0k了
第3个回答  2010-03-05
#include<stdio.h>
int main(){
char a;
while(scanf("%c",&a)){
if(a=='#')
break;
else{
printf("%c\n",a);
getchar(); //添加getchar()获得末尾的换行
}

}
return 0;

}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网