2016-07-04 64 views
0

我得到並顯示名稱,並在我輸入密鑰時停止程序。在下面的代碼中,我得到了正確的結果(我知道「被」已經過時):scanf並獲得不同的工作,將' 0'放入數組中?

#include <stdio.h> 

main() 
{ 
    char name[50]; 

    while(1) 
    { 
     printf("Name: "); 
     scanf("%s", name); 

     if(name[0]=='\0') 
      break; 
     else 
      printf("Name entered: %s\n", name); 
    } 
} 

但是當我嘗試使用scanf函數:

printf("Nome: "); 
scanf("%s", nome); 

條件name[0]=='\0'永遠是真實的這段時間。爲什麼? '\0'在這些功能中的作用是不同的?

+0

因爲'Enter Key'是'\ n' – Shank

+0

http://stackoverflow.com/questions/26391465/why-is-adding-a-leading-space-in-a-scanf-format-string-recommended check這個瞭解@Shank評論 – 2016-07-04 14:15:05

+0

謝謝Olivier。 – Ricardo

回答

1

如果scanf無法爲變量賦值(因爲輸入流有一個空格,終止'string'),它不會將其清除;部分原因在於並非所有變量都有明顯的「清晰」狀態。

所以在您的scanf之後,nome仍然包含之前包含的任何內容。您需要檢查scanf是否能夠通過測試其返回值來分配變量: if (scanf(...) == 1) - 這意味着'did scanf成功分配了一個變量?'

+0

如果我放了一些名字,我可以顯示這個名字,這意味着scanf工作。但是當我輸入(無字符)時,程序不會結束。所以我猜'\ 0'不在數組「名稱」中。就是它? – Ricardo

+0

是的,'\ n'告訴scanf停止reading_,並且它不會複製它的名字,它_stops_。 – Aganju

+0

它停止閱讀嗎?在我的情況下,它實際上沒有。 –

-1

使用「scanf」變量不會變成一個字符串,但與「獲取」變量(名稱)變成字符串,因爲「獲取」自動把'\ 0'在它?

相關問題