c - 无法打印结构变量的 char 元素

标签 c struct

#include<stdio.h>

int main()
{
    struct book
    {
        char name;
        float price;
        int pages;
    };

    struct book b1, b2, b3;
    char ch;
    printf("\nEnter the info of the books:\n");

    while ((ch = getchar()) == '\n' && ch != EOF) { }

    scanf_s("%c", &b1.name, sizeof(char));
    scanf_s("%f", &b1.price, sizeof(float));
    scanf_s("%d", &b1.pages, sizeof(int));

    while ((ch = getchar()) != '\n' && ch != EOF) {}

    scanf_s("%c", &b2.name, 1);
    scanf_s("%f", &b2.price, sizeof(float));
    scanf_s("%d", &b2.pages, sizeof(int));

    while ((ch = getchar()) != '\n' && ch != EOF) {}

    scanf_s("%c", &b3.name, 1);
    scanf_s("%f", &b3.price, sizeof(float));
    scanf_s("%d", &b3.pages, sizeof(int));

    printf("\n%c %f %d", b1.name, b1.price, b1.pages);
    printf("\n%c %f %d", b2.name, b2.price, b2.pages);
    printf("\n%c %f %d", b3.name, b3.price, b3.pages);

    printf("\n");
    return 0;
}

谁能告诉我为什么我无法在以下程序中打印 b1 的名称,我是 C 新手,不胜感激。

结果

输入书籍信息:

A 2454.45 344 
B 56566.55 355 
C 5676.66 566  

输出为:

2454.45 344 
B 56566.55 355 
C 5676.66 566`

最佳答案

您的问题在这里:

struct book b1, b2, b3;
char ch;
printf("\nEnter the info of the books:\n");

while ((ch = getchar()) == '\n' && ch != EOF) { }

scanf_s("%c", &b1.name, sizeof(char));
scanf_s("%f", &b1.price, sizeof(float));
scanf_s("%d", &b1.pages, sizeof(int));

那里的 while 语句是完全没有必要的。 stdin 在 printf() 调用后为空,它不会影响这一点,并且 while 循环会吃掉输入的第一个字符。去掉它,代码就可以按预期工作。

也许值得注意的是,当您刚刚学习时,您可能希望坚持使用更标准的函数。 scanf_s 是 Microsoft 扩展。

关于c - 无法打印结构变量的 char 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49665824/

相关文章:

C Linux 中 C 查找耗时

c - 查看元素是否在枚举中

swift - 在父类(super class)中实现 CodingKey 映射

c++ - avl树的实现导致segmentation fault

c++通过函数传递自定义结构

c - 如何使用 Gnome GIO 以非阻塞方式分块读取文件?

c - "irc.request "libpcap 过滤器

c - GtK+3.0多线程应用

c++ - 为什么这个结构的大小不正确

在 c 中创建一个具有超过 1 个动态大小数组的结构?