gpt4 book ai didi

c - 当我的结构有整数和字符变量时我无法输入

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:29 25 4
gpt4 key购买 nike

下面是我用C写的程序

#include <stdio.h>

struct Book
{
char Title[80] ;
char Author[80];
int Pages;
int DatePB;
};

struct Book input_book(void)
{
struct Book b1;
gets(b1.Title);
gets(b1.Author);
scanf("%d" , &b1.Pages);
scanf("%d" , &b1.DatePB);
return b1;
}

int main(int argc , char *argv[])
{
struct Book b1[3];
int i;
for (i = 0; i < 3; ++i)
{
printf("Enter Book %d:\n" , i + 1);
b1[i] = input_book();
printf("\n");
}
for (i = 0; i < 3; ++i)
{
printf("Book %d:\n" , i + 1);
printf("%s\t%s\t%d\t%d\n" , b1[i].Title , b1[i].Author , b1[i].Pages , b1[i].DatePB);
printf("\n");
}
return 0;
}

这是我得到的输出:

Enter Book 1:
Five Mistakes
Aaditua
532

Enter Book 2:
Four Mistakes
Aaditya

Enter Book 3:
Nine Mistakes
Aaditya

Book 1:
Five Mistakes Aaditua 581983988 532

Book 2:
Four Mistakes 1 32681

Book 3:
Aaditya Nine Mistakes 1 32681

我不明白。我可以输入第一本书的每一个细节,而我不能在第二本书和第三本书中输入整数。请帮我找到合适的答案。

最佳答案

你可以替换;

gets(b1.Title);  // gets is deprecated
gets(b1.Author);

fgets(b1.Title,80,stdin);
fgets(b1.Author,80,stdin);

Notice that gets is quite different from fgets: not only gets uses stdin as source, but it does not include the ending newline character in the resulting string and does not allow to specify a maximum size for str

然后放

while(getchar()!='\n') // Wasting any unprocessed buffer
continue;;

紧接着第二个scanf() .这是出于以下原因:

gets() 可以接受空字符串(参见上面的引用)。如果您的终端是行缓冲的,在第二个 scanf() 之后,当您按下键盘上的 enter 键时,会创建一个未处理的 \n对于 stdin缓冲区,这将被下一个 gets() 消耗.也就是说下一个b1.Title将是一个空字符串。不好的部分是这会弄乱之后的整个输入序列。

引用: gets

关于c - 当我的结构有整数和字符变量时我无法输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36835449/

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