c - Scanf 函数不接受输入

标签 c scanf

我正在使用名为“student”的结构开发一个简单的 C 程序。这是我的代码

#include<stdio.h>
#include<stdlib.h>
  struct  student {
    char name[50];
    int id;
    float marks_1;
    float marks_2;

};


void main(){

    int num,a,i;
    printf("Enter number of students\n");
    scanf("%d",&num);
    struct student s[num];
    for(i=0;i<num;i++)
    {
        a=i+1;
        printf("Enter name of student number %d\n",a);
        scanf("%[^\n]%*c",s[i].name);

    }

  }

当我运行程序时,我可以正确输入学生人数,但之后我无法输入每个学生对应的姓名。这是我得到的输出。

Enter number of students
2
Enter name of student number 1
Enter name of student number 2

RUN FINISHED; exit value 2; real time: 1s; user: 0ms; system: 0ms

可能是什么问题?任何帮助表示赞赏

最佳答案

scanf("%d",&num);

保留您键入的换行符以将输入发送到输入缓冲区中的程序。因此第一次迭代

for(i=0;i<num;i++)
{
    a=i+1;
    printf("Enter name of student number %d\n",a);
    scanf("%[^\n]%*c",s[i].name);

}

立即找到换行符并扫描空字符串。

在扫描之前使用换行符,方法是将第一个格式更改为 "%d%*c" 或在名称扫描格式的开头添加一个空格以跳过初始空白。

关于c - Scanf 函数不接受输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381124/

相关文章:

c++ - 使用 OpenGL 和 WinAPI 跳帧?

c - memcpy 和共享内存结构

c++ - 如何在 C++ 中使用 scanf() 读取字符串?

c - sscanf 直到 c 中的文件末尾

c++ - ID2D1HwndRenderTarget 总是有黑色背景而不是透明

c - 如何在c99标准下将x获取到C中的pow y

c - 我需要添加什么才能将输出显示给用户?

c - 可变顺序对 sscanf 重要吗?

c - 扫描f ("%[^\n]",s);那么如何在C中strcmp呢?

c - scanf在c中获取整数和字符