scanf("%d",&<variable>); 返回1

Zue*_*ntu -3 c scanf

我正在尝试在C中创建一个控制台应用程序来计算城市之间的旅行时间.问题是我的scanSlut方法一直返回1.("slut"in danish = end in english,由于我是丹麦语,我给变量名称丹麦语名称.这也是为了防止调用库中的其他变量,这些都是英文的.)

    printf("Indtast destinationsstationsnummer:\n");
    slut = scanSlut(start);
    if(slut > 15 || slut < 1) {
        do {
            printf("Du har indtastet en ugyldig ankomststation. Indtast venligst en gyldig station\n");
            slut = scanSlut(start);
        } while (slut > 15 ||slut < 1);
    }

int scanSlut(int start) {
    int slut, i;
    for(i=1; stationer[i] != '\0'; i++) {
        if(i!= start) {
            printf("#%d: %s\n",i,stationer[i]);
        }
    }
    printf("slut = %d\n", slut);
    slut = scanf("%d", &slut);
    printf("slut = %d\n", slut);
    return slut;
}
Run Code Online (Sandbox Code Playgroud)

第一个printf("slut = %d\n", slut);返回随机数(这是合乎逻辑的,因为变量包含垃圾直到它被设置),但第二个printf保持写1,即使我按下一些随机数.我也有一个scanStart()方法,它也做我想要的方法:

int scanStart() {
int start, i;
for(i=1; stationer[i] != '\0'; i++) {
    printf("#%d: %s\n",i,stationer[i]);
}
scanf("%d",&start);
return start;
}
Run Code Online (Sandbox Code Playgroud)

我尝试过构建,重建,重启IDE,但我得到的只是1.任何想法?

MBl*_*anc 8

问题出在这一行:

slut = scanf("%d", &slut);
Run Code Online (Sandbox Code Playgroud)

scanf返回分配的输入项数.将其更改为:

scanf("%d", &slut);
Run Code Online (Sandbox Code Playgroud)

(请参阅man scanf了解有关的更多信息scanf).

  • 或者甚至更好地将scanf的返回值保存到单独的变量并检查它以确保您的scanf实际上已经超过 (2认同)