首页 > 解决方案 > *初学者 *C 让我对警告感到困惑

问题描述

所以我声明了一个名为 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;

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

标签: cstructwarnings

解决方案


scanf()需要一个指向存储扫描值的空间(即变量)的指针。但是你的电话交出了自动转换成 a 的a的la[i].preisfloatdouble

使用这样的运算符更改您的代码以提供 to 的la[i].preis地址:scanf()&

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

推荐阅读