C程序最后没有执行printf

时间:2019-01-28 22:22:36

标签: c visual-studio printf

我只是在学校做些小运动,而我却受困于scanf函数。
如果我正在运行此代码,则一切在开始时都可以正常工作,但是一旦完成所有5个scanf,它就会停止工作并退出,而无需最后打印该printf。问题出在哪里?
现在有了代码(我在Windows 10上的Visual Studio 2017中编写代码):

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main() {
    char name[50];
    char gender[1];
    float wage = 0;
    int age = 0;
    int height = 0;

    printf("\nInput Name: ");
    scanf(" %s", name);

    printf("\nInput Gender (m/f): ");
    scanf(" %c", &gender);

    printf("\nInput Monthly Wage: ");
    scanf(" %d", &wage);

    printf("\nInput Age: ");
    scanf(" %d", &age);

    printf("\nInput height in cm: ");
    scanf(" %d", &height);


    printf("\nNAME: %s\nGENDER: %c\nWAGE %d\AGE: %d\nSIZE: %d", name, gender, wage, age, height);

    return 0;
    getchar();
}

3 个答案:

答案 0 :(得分:1)

您的代码有很多问题,让我们一一讨论:

问题1

scanf(" %c", &gender);

在这里使用&gender就是问题所在。您已将性别声明为字符数组而不是变量,因此在scanf语句中,您必须传递数组的第一个元素的地址,因此可以使用&gender代替gender&gender[0]。 如果您尚未了解指针和地址,请转到此链接: https://www.youtube.com/playlist?list=PL2_aWCzGMAwLZp6LMUKI3cc7pgGsasm2_

此外,您只需要输入一个字符,则不需要数组。只需使用char gender;而不是char gender[];

问题2

scanf(" %d", &wage);

您已将工资宣布为浮动工资,因此请使用%f而不是%d

问题3

printf("\nNAME: %s\nGENDER: %c\nWAGE %d\AGE: %d\nSIZE: %d", name, gender, wage, age, height);

在这里查看%d\AGE

\A

将发出警告,因为它似乎是编译器的未知转义序列。实际上,这是您错过\ n的错字。

所以最后用下面的代码行替换您的问题:

char gender;

scanf("%f", &wage);

printf("\nNAME: %s\nGENDER: %c\nWAGE %f\nAGE: %d\nSIZE: %d", name, gender, wage, age, height);

答案 1 :(得分:0)

您的代码存在一些问题。

虽然已指出性别,但简单的解决方法是将其声明为变量。

char gender;
... // Do stuff
scanf("%c", &gender);

工资是浮动的,除非您想将其声明为整数,否则请尝试

float wage;
... // Do stuff
scanf("%f", &wage); 

最后,printf缺少正确的换行符,但这可能不是问题。

代替

printf("\nNAME: %s\nGENDER: %c\nWAGE %d\AGE: %d\nSIZE: %d", name, gender, wage, age, height);

尝试

printf("\nNAME: %s\nGENDER: %c\nWAGE %f\nAGE: %d\nSIZE: %d", name, gender, wage, age, height);

此外,getchar()无效,因为它发生在返回之后。 return语句后的任何内容均无效。

我很可能会漏掉其他错误,但是进行建议的更改应该足够了。

答案 2 :(得分:0)

有些问题会导致未定义的行为或“意外的”情况,因此您应该为此得到编译器警告(如果没有,请打开它们)。

首先,如果您以后要写gender,则char gender;应该定义为scanf(" %c", &gender);

第二,wage的类型为float,因此scanfprintf需要格式说明符%f(而不是%d)。 / p>

第三,您的代码“无法访问”,因为您的getcharreturn 0语句之后。

第四,不是错误/警告,只是要注意,printf在将其缓冲区刷新到控制台之前可能要等待新行。所以写

char gender;
...
scanf(" %f", &wage);
...
printf("\nNAME: %s\nGENDER: %c\nWAGE %f\AGE: %d\nSIZE: %d\n", name, gender, wage, age, height);
...
getchar();
return 0;