读书人

这个有关问题很奇怪帮忙看看

发布时间: 2012-05-10 16:02:39 作者: rapoo

这个问题很奇怪,帮忙看看
#include "stdio.h"
#include "stdlib.h"

int main()
{

char str[20],ch[20];
int i;

printf("input output by s\n");
scanf("%s",str);
printf("%s\n",str);

printf("input output by c\n");
for(i=0;i<6;i++)
scanf("%c",&ch[i]);
for(i=0;i<6;i++)
printf("%c",ch[i]);
system("pause");
}

输出结果:
input output by s
abcdef
abcdef
input output by c
abcdef

abcde请按任意键继续. . .


输出结果中,用%c去初始化一个字符数组时,打印出来数组中只有五位字符,另外好像还在输入和输出之间多了一个回车符,很奇怪?
我试了下,如果把前面用%s接收输入的代码去掉,%c部分代码就正常。
我的编译环境是dev c++

[解决办法]
在所有需要清空输入缓冲区的地方加rewind(stdin);
[解决办法]
楼上正解!第一次输入的\n被当做第二次输入的第一个字符。
[解决办法]

C/C++ code
#include "stdio.h"#include "stdlib.h"  int main(){ char str[20],ch[20]; int i;   printf("input output by s\n"); scanf("%s",str); printf("%s\n",str);//下面三种方法任一种都行 getchar();   //吸收在输入缓冲区的上面输入的回车字符// rewind(stdin);   //位置指针重新指向一个流(数据流/文件)的开头// fflush(stdin);   //清空输入缓冲区 printf("input output by c\n"); for(i=0;i<6;i++)  scanf("%c",&ch[i]); for(i=0;i<6;i++)  printf("%c",ch[i]);  system("pause");}
[解决办法]
C/C++ code
#include "stdio.h"#include "stdlib.h"  int main(){ char str[20],ch[20]; int i;   printf("input output by s\n"); scanf("%s",str); printf("%s\n",str);getchar();   printf("input output by c\n"); for(i=0;i<6;i++)  scanf("%c",&ch[i]); for(i=0;i<6;i++)  printf("%c",ch[i]);  system("pause");  reutrn 0;} 

读书人网 >C语言

热点推荐