c - 使用 scanf 进行结构输入

标签 c

这篇文章附带的代码是一个更大程序的一部分,但我在接受结构化变量“标题”和“作者”的输入时遇到了问题。 该程序似乎循环遍历它并转到下一行。另外,在字符串说明符中的 's' 之前使用 [^\n] 时,它的作用相同,但我读到它用于使用 scanf 将字符串作为输入。看了几篇帖子,还是没明白问题所在。 刚从 C 开始,任何帮助将不胜感激!

struct books{
char title[30];
char author[30];
char subject[20];
int quantity;
int book_id;
char *category;
int count;
float price;
};
struct books book;

book.book_id=id;
printf("\n\n\t\tBook Name:\n\t\t");
scanf(" %s",book.title);
printf("\n\n\t\tAuthor:\n\t\t");
scanf(" %[^\n]s",book.author);
printf("\n\n\t\tQuantity:\n\t\t");
scanf("%d",&book.quantity);
printf("\n\n\t\tPrice:\n\t\t");
scanf("%f",&book.price);

最佳答案

在输入“book.title”和“book.author”中,在字符串说明符的“s”之前使用 [^\n]。

我执行了您的代码并进行了这些修改。代码正确。

您一直使用空格分隔的字符串作为书名。(例如“Mein Kampf”作为书名。)

但是您必须了解您无法使用 Scanf 将空格分隔的单词作为单个字符串输入。因此程序会对其进行循环并移至下一行。

要获取此类输入,您必须使用 getsfgets 函数,或者在字符串说明符中的 's' 之前使用 [^\n]。

关于c - 使用 scanf 进行结构输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42871771/

相关文章:

c - 在小端机器上,位运算符如何工作?

c++ - Arduino 上的 typedef 结构 : variable does not name a type

c - 固定大小的 float / double 以方便携带

c - 如何计算 ADC 读数的平均值?

MySQL C API - 返回零行的查询的返回值是多少

c++ - 与 C++ 相比,在 C 中更好地学习编程基础知识会怎样?

c - 在 thrd_t 上调用 pthread 函数是否合法?

c - 为什么组长无法在 Linux 中创建 session

c - 指向函数的指针

c - 从文件中读取数字到数组中