c - 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();
}
解决方案
您的代码有很多问题,让我们一一讨论:
问题1:
scanf(" %c", &gender);
在这里,您正在使用&gender
这就是问题所在。您已将性别声明为字符数组而不是变量,因此在scanf
声明中您必须传递数组第一个元素的地址,而不是&gender
仅使用gender
or &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);