2014-01-21 27 views
-2

我正在編寫一個代碼來檢查輸入 現在我需要做的是檢查用戶是否鍵入「read_set a」... 但它並不重要,我想要什麼做..在c中打印字符串中的未知錯誤

如果輸入爲: 「read_seta,123」,它顯示與沒有錯誤
如果輸入爲: 「read_set一個,123」,它顯示與BUGS

代碼是:

 input[100]; 
    scanf("%s",input); 
    printf("%s",input); 
     read_set(input) 

int read_set(char input[]){ 
    printf("%c\n\n",input[8]); 
    printf("%s",input); 
} 
第一的printf

,我想要的代碼顯示空間「」,但它並不 ,而是保持它打印性格怪異,每次(每次隨機字符)

,也 printf根本不顯示

有什麼問題?

+0

你的scanf正在讀「read_set」,當您嘗試訪問指數10,這是不確定的。 I.E.一次只能讀入一個字符串,如果要讀取「read_set a」,則需要讀取一個字符串,然後輸入一個字符並將其附加到該字符串前面的空格處。即使那樣,那只有10個字符,所以訪問索引10仍然是未定義的(索引9將包含'a') – AndyG

+0

我更新了文章 –

+3

@WaseemGabour的確,您的問題在於'scanf()'不符合您的想法它確實如此。一般來說,你應該完全避免這個可怕的功能。爲了逐行獲取用戶輸入,請考慮使用'fgets()'來代替。 – 2014-01-21 23:58:01

回答

0
change scanf("%s", input); to scanf("%14c", input); 

現在的問題是,scanf需要14個字符,否則它需要返回。因此,對於輸入字符串
read_set一個,123」 它工作正常,但可以說 「read_set
它需要6個字符(包括 '\ n')。

瓦爾特

0

"%s"不保存空間。

scanf("%s",input);只讀"read_set a,123"高達"read_set"

要讀取整個線路推薦:

fgets(input, sizeof input, stdin); 
// To trim trailing \n 
size_t len = strlen(input); 
if (len > 0 && input[len-1] == '\n') input[--len] = '\0'; 
printf("%s", input);