c - *初学者 *C 让我对警告感到困惑

标签 c struct warnings

所以我声明了一个名为price的 float ,当我尝试编译它时,我得到一个警告,它将是一个 double ,有人能告诉我为什么C认为这是一个 double 吗?

B3N2.c:37:警告:格式指定类型“float *”,但参数类型为“double”[-Wformat] scanf("%f", la[i].preis);

int main(int argc, char *argv[]) {

    struct Lager {
        char artikel[200];
        int anzahl;
        float preis;
    }  la[200];


    printf("Wilkommen bei Lagerverwaltung 97\n\n\nWas möchten sie tun ?\n");

    int exit = 0;
    int x,v;
    int f = 1;
    int i =  0;

    char ques;
    int end;
    do {
        printf("\n(1)Artikel hinzufügen\n(2)Artikel entnehmen.\n(3)Eintrag suchen.\n(4)Lager ausgeben.\n(5)Exit\n");
        scanf("%x",&x);

        switch (x) {
            case 1://add
                do {
                    printf("\nGebe den namen des Produkts an:  ");
                    scanf("%s", la[i].artikel);

                    printf("\nAnzahl der verfügbaren Produkte:  ");
                    scanf("%i", &la[i].anzahl);

                    printf("\ngib den preis des artikels an:  ");
                    scanf("%f", la[i].preis);

                    printf("\n\nWeiteres Produkt hinzufügen ? (J/N)");
                    scanf("%s", &ques);

                    switch (ques) {
                        case 'J':
                            v++;
                            f++;
                            break;
                        case 'N':
                            end = 1;
                            v = 0;
                            break;
                        default:
                            printf("Falsche Eingabe\n");
                            break;
                    }
                } while (end != 1);
                if (v >= 2) {
                    printf("Produkt wurde Erfolgreich hinzugefügt\n\n");
                }else {
                    printf("Produkte wurden Erfolgreich hinzugefügt\n\n");
                }
                break;

很抱歉问了这个愚蠢的问题,但我试图解决它,但现在我完全不知所措

最佳答案

scanf() 需要一个指向存储扫描值的空间(即变量)的指针。但是您的调用会传递 la[i].preis,它是一个float,会自动转换为 double.

更改代码,使用 & 运算符将 la[i].preis 的地址提供给 scanf(),如下所示:

scanf("%f", &la[i].preis);

关于c - *初学者 *C 让我对警告感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59184989/

相关文章:

python - Python 和 MATLAB 中的警告类型

c - unsigned 和 signed int 指针之间的区别

C:从txt文件中读取文件并插入到数组中。逗号作为分隔符

c - 当我尝试在结构体数组中给出值时,为什么我的程序会停止?

c++ - 指向成员结构的指针如何工作?

javadoc -Xdoclint 一直标记我的(可选)匿名类,因为它显然没有评论

python - 我应该停止使用已弃用的模块吗?

c - C 中的静态函数线程安全吗?

c - 内存错误(我猜)- C - 结构中的指针(用作数组)

c - 使用 __attribute__(__packed__) 填充结构,真的值得吗?