我试图读取包含空格的字符串,因此scanf无法正常工作,因此我尝试使用fgets。当我运行它并且命中if语句时,屏幕上显示的内容是:
Please enter the course name.
You entered the course:
Please enter the course ID.
=======================
if(coursetotal==0)/*start of 1 course*/
{
printf("Please enter the course name.\n");
fgets(course[0].name,sizeof(course[0].name),stdin);
printf("You entered the course name: %s\n",course[0].name);
printf("\nPlease enter the four digit course ID.\n");
int temp=0,temp1=0,count=0; /*Variables used to check if 4 digits*/
scanf("%d",&temp);
temp1=temp;
while(temp1!=0)
{
temp1/=10;
count++;
}
if(count==4)/*start of is 4 digits*/
{
course[0].id=temp;
coursetotal+=1;
printf("You entered the course ID: %d\n",course[0].id);
}/*end of is 4 digits*/
else
{
printf("The course ID you input was not 4 digits.\n");
return;
}
printf("You have successfully added the course: %s. The ID is : %d, and you now have a total of %d course.\n",course[0].name,course[0].id,coursetotal);
} /*end 1 course*/
答案 0 :(得分:1)
首先,我必须解决我在这里看到的烦恼:
我试图读取包含空格的字符串,因此scanf无法正常工作
That's not true at all.有一个名为negated scanset的东西,您可以使用它来读取通常终止scanf()
字符串输入的空格字符(例如空格)
那就是说。您应该只选择一个输入机制scanf()
或fgets()
并专门使用它。当你混合时,事情会变得怪异而错过。您在此处完成此操作的事实告诉我您已经在其他地方完成了此操作,并且您可能在此之前使用scanf()
留下了一个不洁净的"" stdin
缓冲区。这将解决您的问题。
现在给你一个简单的例子,给定一个int(num
)和一个char *(`string):
scanf("%d", &num);
fgets(string, sizeof(string), stdin);
printf("%d\n%s\n", num, string);
您似乎跳过了为fgets
输入任何内容的功能,因为它实际上只是从scanf()
的数字条目中删除了换行符字符。您将在输出中看到类似的内容:
5
5
// <-- and a couple
// <-- of blank lines
表示您选择了换行符。如果你要查看字符串的第一个(也是唯一的)字符的ASCII值,那就更加明显了:
printf("%d\n", string[0]); // this would yield 10 the ASCII value of \n