gpt4 book ai didi

c - Fgets 跳过输入并打印下一行?

转载 作者:行者123 更新时间:2023-11-30 15:36:22 25 4
gpt4 key购买 nike

我正在尝试读取包含空格的字符串,因此 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*/

最佳答案

首先,我必须解决我在这里看到的令人烦恼的问题:

I'm trying to read a string including spaces so scanf wouldn't work

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

关于c - Fgets 跳过输入并打印下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22600189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com