C 行不提示输入

C 行不提示输入,c,visual-studio-2010,C,Visual Studio 2010,我是编程新手,一直在课堂上做作业。出于某种奇怪的原因,程序一直在同一行上打印两个不同的printf,而没有给我输入信息的机会 代码如下: #include <stdio.h> #include <stdlib.h> int main (void) { char Name[20]; char cid1[6]="", cid2[6]="", cid3[6]="", cid4[6]="", cid5[6]="", cid6[6]=""; char Desc

我是编程新手,一直在课堂上做作业。出于某种奇怪的原因,程序一直在同一行上打印两个不同的printf,而没有给我输入信息的机会

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{   char Name[20];
    char cid1[6]="", cid2[6]="", cid3[6]="", cid4[6]="", cid5[6]="", cid6[6]="";
    char Description1[21]="", Description2[21]="", Description3[21]="", Description4[21]="", Description5[21]="", Description6[21]="";
int hrs1 = 0, hrs2=0, hrs3=0, hrs4=0, hrs5=0, hrs6=0;
char grade1[2]="",grade2[2]="",grade3[2]="",grade4[2]="",grade5[2]="",grade6[2]="";

printf("Enter Students Name ");
fgets(Name, 20, stdin);

printf("Enter Class ID ");
scanf("%5s", cid1);

printf("Enter Class Description ");             // Problem
fgets(Description1, 20, stdin);                 // here

printf("Enter Class Hours ");
scanf("%d", &hrs1);

printf("Enter Class Grade ");
fgets(grade1, 1, stdin);

printf("%s\n", Name);
printf("%s\n", cid1);
printf("%s\n", Description1);
printf("%d\n", hrs1);
printf("%s\n", grade1);

system("pause");

return 0;
#包括
#包括
内部主(空)
{字符名称[20];
字符cid1[6]=“”,cid2[6]=“”,cid3[6]=“”,cid4[6]=“”,cid5[6]=“”,cid6[6]=“”;
字符描述1[21]=“”,描述2[21]=“”,描述3[21]=“”,描述4[21]=“”,描述5[21]=“”,描述6[21]=“”;
int hrs1=0,hrs2=0,hrs3=0,hrs4=0,hrs5=0,hrs6=0;
字符等级1[2]=“”、等级2[2]=“”、等级3[2]=“”、等级4[2]=“”、等级5[2]=“”、等级6[2]=“”;
printf(“输入学生姓名”);
fgets(名称,20,标准DIN);
printf(“输入类别ID”);
扫描频率(“%5s”,cid1);
printf(“输入类描述”);//问题
fgets(描述1,20,标准);//这里
printf(“输入课时”);
scanf(“%d”和&hrs1);
printf(“输入等级”);
fgets(1级、1级标准);
printf(“%s\n”,名称);
printf(“%s\n”,cid1);
printf(“%s\n”,说明1);
printf(“%d\n”,hrs1);
printf(“%s\n”,等级1);
系统(“暂停”);
返回0;
标记为“此处有问题”的区域是当前出现问题的区域。它将直接跳到输入课时,而不是提示输入课堂描述,并完全忽略底部的输入课堂成绩


它将其打印为:输入Class descriptiononenter Class Hours.

输入缓冲区中还有一个换行符,来自上一次输入操作。消除它的一种方法是逐字符读取,直到您读取了
'\n'

您的
scanf
调用没有使用换行符。如
fgets
当它读取换行符时返回,它立即返回

您可以将
scanf
格式字符串更改为使用换行符,如下所示

scanf("%5s\r\n", cid1);

您似乎正在windows上运行此操作。windows在正确刷新其标准DIN时出现问题。请尝试使用

 fflush(stdin);

在从控制台读取任何内容后。

他们试图教您和之间的区别。他们可能在欺骗您,告诉您类ID必须是4个字符

因此,如果您的类ID为“1234”,然后按Enter键,则
stdin中的结果是:

1234\r\n

scanf
中的
%5s
格式要求读取5个字符,然后继续。因此,您读入
1234\r
并将
\n
留在
stdin
流中。然后当执行
fgets
时,它读入
\n
并继续

从上面的
fgets

从流中获取字符串

从流中读取字符并将其作为C字符串存储到str中 直到读取了(num-1)个字符或换行符或 到达文件末尾,以先发生的为准

我已经放置了一个fflush(stdin);在我输入我的类Id之后,它允许我输入我的类描述(finally!!),但一旦我开始输入我的类等级,它会立即打印分配给打印的所有变量,而没有机会输入类等级