我最近开始使用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")
不是一个选项
答案 0 :(得分:2)
scanf
命令不会使用您在输入y
后按下的Enter键。所以getchar()
很乐意消耗它。
一种解决方案是在阅读y
之后消耗输入行的其余部分;代码如下:
int ch; while ( (ch = getchar()) != '\n' && ch != EOF ) {}
虽然在程序结束时还有其他暂停选项,但这可能是一个好主意,因为如果您稍后将程序扩展为期望字符串或字符输入,则有必要。
答案 1 :(得分:1)
此问题的一般解决方案是使用fgets
读取用户的输入,然后使用sscanf
进行扫描:
char ln[1024];
printf("Enter y: ");
fgets(ln, 1024, stdin);
sscanf(ln, "%d", &y);
对于错误条件,您仍需要检查fgets
和sscanf
的返回值,但这样更容易处理面向行的输入。