我是编程新手,并且一直在课堂上完成作业。由于一些奇怪的原因,该程序在同一行上打印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。
答案 0 :(得分:1)
输入缓冲区中还有一个换行符,来自上一个输入操作。摆脱它的一种方法是逐字逐句阅读,直到你读到'\n'
。
答案 1 :(得分:0)
您没有通过scanf
电话使用换行符。当fgets
在读取换行符时返回,它会立即返回。
您可以更改scanf
格式字符串以使用换行符,如下所示
scanf("%5s\r\n", cid1);
答案 2 :(得分:0)
好像你在Windows上运行它。 Windows在正确刷新stdin方面存在问题。尝试使用
fflush(stdin);
从控制台读取任何内容后。
答案 3 :(得分:0)