注册 登录
编程论坛 C语言论坛

c语言输入字符问题 求解

有马公生 发布于 2020-05-16 10:19, 1285 次点击
#include<stdio.h>

struct jihe{
   
    char a[10];
    int num;   
}s;
int main()
{   
     int i,j;
     printf("元素个数:");
     scanf("%d",&s.num);
     printf("请输入:");
     for(i=0;i<s.num;i++)
       scanf("%c",&s.a[i]);
     printf("打印结果为:");
     for(i=0;i<s.num;i++)
       printf("%c",s.a[i]);
}
只有本站会员才能查看附件,请 登录


为啥输入6个字符,打印不是6个啊?请大佬们看看
2 回复
#2
有马公生2020-05-16 10:30
上述代码执行过程:
1、第一个scanf()函数等待用户输入;
2、用户输入6,同时6作为ASCII码值存储在缓冲区;
3、第一个scanf()函数读取整型ASCII值到s.num,故此刻整型s.num=6
4、用户敲下回车键,同时回车键(换行符’\n’)转化为ASCII码(10)值存入缓冲区;
5、缓冲区已有数据,直接读取缓冲区数据,第二个scanf()函数读取用户输入的'\n'
6、所以输入6个实际只读了5个+上次的'\n'。
7.输出'\n'+5个字符
————————————————
解决:用getchar()来接收多余的回车键

struct jihe{
   
    char a[10];
    int num;   
}s;
int main()
{   
     int i,j;
     char c;
     printf("元素个数:");
     scanf("%d",&s.num);
     while((c=getchar())!='\n')   //getchar()来接收多余的回车键
      continue;
     printf("请输入:");
     for(i=0;i<s.num;i++)
       scanf("%c",&s.a[i]);
     printf("打印结果为:");
     for(i=0;i<s.num;i++)
       printf("%c",s.a[i]);
 }
#3
有马公生2020-05-16 10:31
自己解决了。。
1