首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-05-10 
这个问题很奇怪,帮忙看看#include stdio.h#include stdlib.hint main(){char str[20],ch[20]int ipr

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

热点排行