*初学者* C使我感到困惑

时间:2019-12-04 21:36:49

标签: c struct warnings

所以我声明了一个名为price的浮点数,当我尝试对其进行编译时,我警告说它将是一个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;

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

1 个答案:

答案 0 :(得分:0)

scanf()需要一个指针到将存储扫描值的空间(即变量)。但是您的呼叫移交了la[i].preis value ,这是一个自动转换为float的{​​{1}}。

通过使用double运算符,将代码更改为将la[i].preis的地址赋予scanf()

&