线路没有提示输入

时间:2013-02-20 20:19:50

标签: c visual-studio-2010

我是编程新手,并且一直在课堂上完成作业。由于一些奇怪的原因,该程序在同一行上打印2个不同的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;

标有“问题此处”的区域是当前问题所在。它不会提示课程描述,而是直接跳到课堂时间,完全忽略底部的输入课程成绩。

将其打印为:Enter Class DescriptionEnter Class Hours。

4 个答案:

答案 0 :(得分:1)

输入缓冲区中还有一个换行符,来自上一个输入操作。摆脱它的一种方法是逐字逐句阅读,直到你读到'\n'

答案 1 :(得分:0)

您没有通过scanf电话使用换行符。当fgets在读取换行符时返回,它会立即返回。

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

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

答案 2 :(得分:0)

好像你在Windows上运行它。 Windows在正确刷新stdin方面存在问题。尝试使用

 fflush(stdin);
从控制台读取任何内容后

答案 3 :(得分:0)

他们试图教你scanffgets之间的区别。而且他们可能会告诉你类ID必须是4个字符。

因此,如果您的班级ID为“1234”并且之后点击了 Enter ,那么stdin中的最终结果是:

1234\r\n

%5s中的scanf格式表示阅读5个字符,然后继续前进。因此,您在1234\r中阅读并在\n信息流中留下stdin。然后,当fgets执行时,它会读入\n并继续前进。

从上面的fgets

  

从流中获取字符串

     

从流中读取字符并将它们作为C字符串存储到str中   直到(num-1)个字符被读取或者是换行符或者   达到文件结尾,以先到者为准。