【问题标题】:*Beginner *C confusing me with Warnings*初学者 *C 让我对警告感到困惑
【发布时间】:2020-03-29 18:50:52
【问题描述】:

所以我声明了一个名为 price 的浮点数,当我尝试编译它时,我警告说它会是双精度的,有人能告诉我为什么 C 认为这是双精度吗?

B3N2.c:37:警告:格式指定类型“浮点 *”,但参数的类型为“双”[-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;

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

【问题讨论】:

    标签: c struct warnings


    【解决方案1】:

    scanf() 需要一个指针 指向将存储扫描值的空间(即变量)。但是您的调用移交了la[i].preis,这是一个自动转换为doublefloat

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2013-07-28
      • 2015-07-30
      • 2015-12-01
      • 2010-12-24
      相关资源
      最近更新 更多