首页 > 解决方案 > C程序最后没有执行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();
}

标签: cvisual-studioprintf

解决方案


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

问题1

scanf(" %c", &gender);

在这里,您正在使用&gender这就是问题所在。您已将性别声明为字符数组而不是变量,因此在scanf声明中您必须传递数组第一个元素的地址,而不是&gender仅使用genderor &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);

推荐阅读