2013-02-02 50 views
1

可能重複:
Program doesn’t wait for user input with scanf(「%c」,&yn);C程序中設置變量值的 n

我剛開始是從事C編程,和一些奇怪的事情(我沒有用C++遭遇)正在彈出。

以我的頭文件,我聲明變量(見onemoretime在代碼.h文件),其值在以後使用用戶輸入通過scanf()設置。出於某種原因,使用該變量的條件將無法正常工作,要麼返回無限重複的結果,要麼只是沒有做任何事情。我設置了一些斷點,並發現第一次onemoretimemain()函數中被調用時,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 
} 

如果它是一個因素可言,將鼠標懸停在onemoretime變量在Xcode(顯示其基本屬性),頭文件中初始聲明後變量的每個實例都顯示值爲\n

我在做什麼錯? onemoretime的值如何由用戶設置,而不是在用戶能夠達到之前由程序設置?

+0

「我在做什麼了?」 - 乍一看有兩件事:1你從C++開始,然後你試圖學習C,2.你使用'scanf()'獲得用戶輸入,而這又不會做你認爲它的工作。 – 2013-02-02 06:29:42

+0

與C++並列學習C有什麼問題? – Jules

+1

nC有一些概念,你肯定需要掌握才能不犯錯誤。C++也有這些,但有一個轉折點,而且由於C++是一個更復雜的(實際上更難以獲得的)語言,所以我通常鼓勵人們在深入研究C++之前掌握C語言,否則他們會有這樣的問題。 – 2013-02-02 06:35:47

回答

4

[\n]是不是一個值scanf()應該承認,[&hellip;]

這是在一般的事實,但「過空白字符的正常跳過[被抑制案件%c]「[link]。

要獲得oponemoretime,我推薦使用fgetclink),而不是scanf,並處理空格跳躍自己。

0

每當你想獲得一個單個字符與scanf()您必須始終使用的東西吸收換行符character.You可以做這樣的事情scanf("%c\n",&onemoretime);