2017-02-22 146 views
2

因此,這裏是我的代碼:如何檢查用戶是否輸入字符串值?

main() 
{ 
     char *iochar;                     

     printf(" Enter a standard line: ");                
     scanf ("%s", &iochar); 

     if (iochar != NULL) 
     { 
       printf(" Here's what you entered: %s ", &iochar); 
     } 
     else 
     { 
       printf(" Oops! Looks like you forgot to enter something! "); 
     } 
} 

我的問題是,我可以掃描用戶進入並儲存起來,如果東西存在,它拿出正確的消息。但如果我只是打回來測試沒有輸入(空,空等),程序既不退出也不輸出我的錯誤信息。它只是掛起,直到我輸入一些東西。

我一直在Java編程的最後兩個學期,所以C現在完全失去了我。所以任何幫助將不勝感激。

+0

所以你只是想驗證輸入是否是一個字符串? –

+4

不要使用'scanf'(永遠)。使用'fgets',或者,如果你有,'getline'。然後,「剛剛返回」會產生字符串'「\ n」'並輸入control-D(強制EOF條件)會產生字符串'「」''。順便說一句,第二個和第三個'printf'字符串末尾的空格應該是'\ n'。 – zwol

+0

@OusmaneDiaw在這一點上,是的。我的代碼必須做其他事情,但我必須能夠驗證事實上有某種輸入。 – Polly

回答

1

scanf ("%s", &iochar);對檢測空行沒有用。

"%s"首先指示scanf()在繼續讀取非空白字符之前讀取並丟棄所有前導空格,包括'\n'。所以代碼已經丟失了'\n'


而是使用fgets()

// Enough room for 80 characters + \n + \0 
#define LINE_SIZE (80 + 1 + 1) 
char buf[LINE_SIZE]; 

if (fgets(buf, sizeof buf, stdin) == NULL) { 
    puts("end-of-file or input error detected"); 
} else if (buf[0] == '\n') { 
    puts("Empty line entered"); 
} else { 
    printf("Input line: <%s>\n", buf); 
} 

輸入

Hello World (and <Enter>) 

輸出(注意\ n讀取在仍然保留)

Input line: <Hello World 
> 

要清楚:在C中,字符串是一個字符序列,直到幷包括終止空字符'\0'。用戶不輸入字符串。用戶輸入通常是的文本直至幷包括終止換行'\n'fgets()讀取的輸入,然後將空字符附加到結果buffer字符串`。

+0

哦,我的天哪,非常感謝!它現在就像夢一樣運作!哈哈。 – Polly

0

這是我的建議:不要使用scanf。它的規則很混亂,很難得到你想要的行爲。 相反,我建議您使用getch手動將每個字符讀入緩衝區,直到用戶輸入換行符'\n'。然後,您可以使用0零終止緩衝區,然後將該緩衝區用作普通字符串。如果它是空的,只需使用strlen(x)檢查字符串的長度。

+0

你知道'fgets'嗎? –

+0

是的,但我更喜歡不使用自己實現的標準庫函數。 – bace1000

相關問題