C语言简单循环的问题

iWarming 2017-10-24 09:52:54
输入x=3,输入3个字符,输出为两个字符,求各位帮忙解答
#include<stdio.h>
void main()
{
int i,x;
char a[10];
scanf("%d",&x);
for(i=0;i<x;i++)
scanf("%c",&a[i]);
for (i=0;i<x;i++)
printf("%c",a[i]);
}
...全文
332 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
陪妳看星星 2017-10-30
  • 打赏
  • 举报
回复
引用 5 楼 cfjtaishan 的回复:
[quote=引用 4 楼 u010312274 的回复:] 还可以: fflush(stdin);
fflush对与stdout是可行的,但是对于stdin是未定义的,即不一定都好使。[/quote] 未定义的意思是让各个编译器厂商自己定义,VS下我试过是可以的,别的编译器不一定行。只要编译器支持、不需要跨平台,还是可以用的。
red-fly 2017-10-30
  • 打赏
  • 举报
回复
学习了,看似简单,还真没有看出问题,几楼所说,很是佩服,以后还是得仔细一点,搞技术的,真是马虎不得
棉猴 2017-10-30
  • 打赏
  • 举报
回复
1 问题分析
正如1楼所说,在输入“3 回车”之后,x的值为3,而a[0]的值是回车符0x0a,如图1所示

也就是说,回车符也作为一个输入被使用了。
2 问题解决
解决该问题的方法就是屏蔽回车符。在scanf()之后加入getchar()函数。
	scanf_s("%d", &x);
getchar();

getchar()函数的作用是从标准输入流中读取1个字符,调用该函数正好可以将输入流中的回车符读取出来,此时如果定义一个变量保存getchar()的返回值,可以看到该返回值是
0x0a,即回车符。
之后,就可以将输入的字符串保存到数组x中了,如图2所示
自信男孩 2017-10-30
  • 打赏
  • 举报
回复
引用 4 楼 u010312274 的回复:
还可以: fflush(stdin);
fflush对与stdout是可行的,但是对于stdin是未定义的,即不一定都好使。
赵4老师 2017-10-30
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。
陪妳看星星 2017-10-29
  • 打赏
  • 举报
回复
还可以: fflush(stdin);
自信男孩 2017-10-25
  • 打赏
  • 举报
回复
因为三个字符里的第一个接收了换行符,即是输入x时,残留在输入缓冲区里的换行符'\n',这个你可以通过输出这三个字符是,注意一下第一个字符是不是一个换行; 解决办法,可以考虑在输入x之后,循环输入之前,加一句getchar();作用是接收(吸收)残留在输入缓存里的换行符;
小熊之怒 2017-10-25
  • 打赏
  • 举报
回复
%c单个字符输出的意思
%s是输出字符串
%d是输出整型
%f是输出整型
这些都是c语言格式输入输出的内容,找本基础的书好好看看吧,把基本的东西掌握好了
das白 2017-10-24
  • 打赏
  • 举报
回复
%c 会接受回车符 可以在scanf后加一个getchar();

70,035

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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