【发布时间】:2015-03-11 00:53:11
【问题描述】:
我最近开始用 C 编程,但我在这段代码中遇到了问题:
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1416
int main () {
float x;
int y;
x = PI;
printf("Enter y: ");
scanf(" %i", &y);
printf("The new value of y is: %i.\n\n",y);
x = x * y;
printf("The new value of x is: %f.\n\n",x);
getchar();
return 0;
}
问题出现在最后getchar(),程序关闭并且不等待输入。我找到了一个我根本不喜欢的解决方案,即添加 2 次 getchar()。有什么办法吗?我使用的是 ubuntu,所以system("pause") 不是一个选项
【问题讨论】:
-
需要重复 getchar() 的问题是第一次调用从用户输入的 y 中获取新行。顺便说一句:'Enter y:' 不会告诉用户输入整数,因此用户可以(永远不要相信用户输入的内容)'aaaaaa'。 (或类似的)然后 scanf() 将失败。这意味着应始终检查 scanf 的返回值以确保操作成功(在这种情况下,返回值应为 1)。
-
'x' 是浮点数,因此 PI 应定义为 '#define PI (3.1416f) 注意末尾的 'f',表示浮点数。否则,这将是一个双精度数,并且编译器必须添加一个转换才能从双精度数转换为浮点数。 '(' 和 ')' 应始终围绕 #defined 数字使用,因此在调用宏时文本替换不会导致不需要/意外的代码序列。
-
这个程序的用户,包括你以后的你,都不知道'x'和'y'的意义,所以用printf语句显示有用的文本,这样用户就会了解正在发生的事情。