这个问题很奇怪,帮忙看看
#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;}