C将变量值设置为\ n

时间:2013-02-02 06:24:29

标签: c variables conditional newline

  

可能重复:
  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的值如何由用户设置,而不是在用户访问之前由程序设置?

2 个答案:

答案 0 :(得分:4)

  

[\n]并非值scanf()应该识别,[...]

这一般是正确的,但是&#34;在%c]&#34;的情况下,正常跳过空白字符被抑制了。 [link]。

要获得oponemoretime,我建议您使用fgetclink)而非scanf,并处理空白跳过自己。

答案 1 :(得分:0)

每当你想用scanf()得到一个单一字符时,你必须总是使用某些东西来吸收换行符。你可以做这样的事情scanf("%c\n",&onemoretime);