「已注销」 2015-12-24 02:48 采纳率: 50%
浏览 2793
已采纳

关于scanf输入数组单个数值的问题

我最近在学习scanf的具体使用。然后遇到了一个问题就是,当我只想给数组的一个元素输入scanf输入的值的时候,无法输入,也无法显示。
程序是这样的:
#include
#include
void main()
{
char a;
char b[10];
char c[10];
char *p;
p=b;

printf("a=");
scanf("%c",&a);
printf("b=");
scanf("%s",b);
printf("a=%c\n",a);
printf("b=%s\n",b);

printf("p=b=");
scanf("%s",p);
printf("c=");
scanf("%c",&c[0]);
printf("p=%s\n",p);
printf("c[0]=%c\n",c[0]);

结果是这样的:
a=a
b=apple
a=a
b=apple
p=b=pineapple
c=p=pineapple
c[0]=

程序直接跳过了c=之后的scanf,这是为什么呢?

  • 写回答

4条回答 默认 最新

  • 普通网友 2015-12-24 03:20
    关注

    没有清空内存缓冲区。1、flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
    fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。

    2、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
    ① 遇空格、“回车”、“跳格”键。
    ② 遇宽度结束。
    ③ 遇非法输入。
    键盘缓冲区就可能有残余信息问题。
    scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
    解决就要在scanf()函数之后加个fflush(stdin)。

    下面是我的代码:
    #if 1
    #include

    int main()
    {
    char a;
    char b[10];
    char c[10];
    char *p;
    p = b;
    printf("a=");
    scanf("%c", &a);
    fflush(stdin);
    printf("b=");
    scanf("%s", b);
    fflush(stdin);
    printf("a=%c\n", a);
    printf("b=%s\n", b);
    printf("p=b=");
    scanf("%s", p);
    fflush(stdin);
    printf("c=");
    scanf("%c", &c[0]);
    fflush(stdin);
    printf("p=%s\n", p);
    printf("c[0]=%c\n", c[0]);
    return 0;
    }
    #endif

    附图片:
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波