2016-06-08 40 views
0
#include <stdio.h> 
#include <stdlib.h> 
//A simple program that asks for the user's name and prints it back out. 
int main() 
{ 
    char name[15]; 
    printf("What is your name? "); 
    scanf("%c",&name); 
    printf("Name: %c",name); 
} 

無論輸入是什麼,笑臉總是輸出。我意識到,如果我將%c更改爲%s,程序將運行得很好,但是我想知道的是,爲什麼呢,出於所有的原因,笑臉是輸出。 另外,如果第二%C被替換爲%S即爲什麼這個C代碼總是輸出笑臉?

char name[15]; 
printf("What is your name? "); 
scanf("%c",&name); 
printf("Name: %s",name); 

然後@符號被輸入的第一字符之後打印。例如,如果輸入是「Sam」,那麼輸出將是「S @」。任何想法爲什麼發生這種情況?

+1

它並不總是輸出。我不認爲它確實如此。 –

+2

可能是因爲「name」的內存地址的低位字節恰好是系統上笑臉的字符值。純粹巧合。 –

+1

總是,*總是*檢查任何'scanf'系列功能的返回,尤其是在進行用戶輸入時。 –

回答

4

這是不確定的行爲,儘量

scanf("%14s", name); 

您傳遞了錯誤的參數以「%C」說明符需要一個指向一個char。相反,您需要"%s"說明符,並且因爲name是一個數組,它會自動指向它的第一個元素,因此您不需要運算符的&地址。

+0

你使用了錯誤的格式說明符,你沒有得到輸出。使用%s而不是%c。由於%c只接受一個字符,並且%s以字符串形式輸入。也有不使用&的。由於數組名稱表示爲基地址。 –