可能重复:
Program doesn’t wait for user input with scanf(“%c”,&yn);
我刚刚开始使用C语言进行编程,并且出现了一些奇怪的东西(我在C ++中没有遇到过)。
在我的头文件中,我声明了一个变量(请参阅onemoretime
文件的代码中的.h
),稍后使用用户输入scanf()
设置其值。由于某种原因,使用变量的条件将无法正常工作,无论是返回无限重复的结果,还是只是没有做任何事情。我设置了一些断点,发现在onemoretime
函数中第一次调用main()
时,onemoretime
的值由于某种原因设置为\n
。
这不是值scanf()
应该识别的值,但输入被视为新行(显然)。当我输入y
时,应该触发else if
条件并循环回main()
的开头,Xcode的调试器只是说,error: 'y' is not a valid command.
这是我的.h
文件:
#ifndef C1_Header_h
#define C1_Header_h
float num1, num2;
char op, onemoretime;
#endif
...这是.c
文件中的相关代码:
#include <stdio.h>
#include <math.h>
#include "Header.h"
int main(int argc, const char * argv[])
{
printf("Enter a two-number calculation below:\n");
while (1)
{
scanf("%f%c%f", &num1, &op, &num2);
// addition
if (op == '+')
{
printf("%f\n", num1+num2);
printf("\nDone. Would you like to solve another math problem (y/n)?\n");
scanf("%c", &onemoretime);
while (1)
{
if (onemoretime == 'n')
{
printf("Ok. Terminating program.");
return 0;
}
else if (onemoretime == 'y')
{
// loop back to start main function
}
}
}
}
// rest of code, irrelevant here
}
如果它是一个因素,将鼠标悬停在Xcode中的onemoretime
变量上(显示其基本属性),则头文件中初始声明后的每个变量实例都会显示值为{{1} }。
我做错了什么? \n
的值如何由用户设置,而不是在用户访问之前由程序设置?