2012-10-01 37 views
0

我有一個小C程序的問題。它輸出一個問題(見下面的代碼),其中我可以把輸入放入(y和n)中,但是沒有其他事情發生,即使它打算根據輸入的輸入(y或n)打印某些內容。但是,在我的問題後沒有輸出,程序剛剛退出。下面是代碼:爲什麼沒有這個y/n程序的輸出

#include <stdio.h> 

int main() 
{ 
     char string [80]; 
     static char y; 
     static char n; 
     printf("ARE YOU SHAQIRI? [y/n]: "); 
     scanf("%s", string); 
     if ("%s" == "y") 
       printf("That's impossible. YOU CANNOT BE SHAQIRI YOU IDIOT"); 
     else if ("%s" == "n") 
       printf("I thought not."); 
     fflush (stdin); 
     return 0; 
} 
+1

爲什麼在單個字符是ay/n響應所需的全部字符時浪費字符串的80個字節?只需'getchar()'而不是'scanf()' – Mike

+1

不要在'stdin'上調用'fflush' - 它會導致未定義的行爲。另外,你爲什麼要讓你的局部變量爲'static'? –

+0

以下是根本錯誤:*「%s」*不是神奇的。它只是帶有百分號和s的文字字符串。所以*「%s」==「y」*將始終爲假,和*「%s」==「n」*一樣。 – dyoo

回答

6

你在你比較兩個問題:if ("%s" == "y")

  • "%s"是你scanf格式字符串。如果scanf成功讀取輸入,則結果將顯示在您的變量中:string
  • 請勿使用==來比較字符串。你應該使用strcmp

因爲您在if這兩個測試中都使用了此表單的比較,所以兩個分支都不會執行,並且您看不到任何輸出。

也不要致電fflushstdin。你可能打算在那裏打fflush(stdout)

+0

好的,所以在修改程序並使用Mike的例子之後,鏈接器會拋出一個心理錯誤 - http://pastebin.com/QA3eFHiR – islandmonkey

+0

哦,這裏是代碼 - http://pastebin.com/xnP6tcdk – islandmonkey

+0

好的,所以我的大錯誤變成了一個小錯誤(我需要包括stdlib.h和string.h :) 'shaqiri.c:10:13:error:expected')'string constant shaqiri.c :12:18:error:expected')'字符串常量前 ' – islandmonkey

0

這不是你如何用C比較字符串,你需要使用strcmp。此外,您需要比較變量string,而不是"%s"

0

scanf()將返回的值存儲在第二個參數中。見here。其次你compairing串錯了...用strcmp

我只是去那裏把它做爲一個簡化你的程序:

  1. 使用單個字符來存儲單個字符輸入
  2. 你可以按照你現在想要的方式保留你的條件「==」
  3. 刪除了stdin的fflush,你不應該那樣做。
  4. 爲非'y'/'n'輸入值添加了「全部捕獲」情況。

下面是修改後的代碼:

#include <stdio.h> 
int main() { 
    char input; 
    printf("ARE YOU SHAQIRI? [y/n]: "); 
    input = getchar(); 
    if (input == 'y') 
     printf("That's impossible. YOU CANNOT BE SHAQIRI YOU IDIOT"); 
    else if (input == 'n') 
     printf("I thought not."); 
    else 
     printf("Not valid input..."); 
    return 0; 
} 
0

C沒有內置運營商比較字符數組,因此你叫strcmp,像這樣:

if(strcmp(string, "yes") ==) 
{ 
    /* User said yes */ 
} 

確保#include <string.h>