2014-11-06 47 views
1
#include <stdio.h> 

int main() 
{ 
    char yourname; 
    int yourage; 

    printf("Whats your name?\t"); 
    scanf("%c",&yourname); 
    printf("How old are you?\t"); 
    scanf("%d",&yourage); 
    printf("You are %d years old and your name is %c\n\n\n",yourage,yourname); 
    system("pause"); 
    return(0); 
} 

我想這個程序要求輸入用戶名和年齡,然後打印出來..Ç - scanf函數,printf的姓名和年齡節目

+1

你的問題是什麼? – 2014-11-06 21:53:21

+0

您是否閱讀過[scanf(3)]的文檔(http://man7.org/linux/man-pages/man3/scanf.3.html)?你在一些免費軟件中搜索了一些'scanf'的例子嗎? – 2014-11-06 21:53:37

+0

很好。祝你好運。你有問題嗎? – 2014-11-06 21:54:10

回答

1
當您使用 scanf

%c是爲了得到一個單一的字符。如果你想得到一個字符串,你需要使用%s

此外,在C語言中,字符串只是char數組。所以你需要聲明一個char數組。

#include <stdio.h> 

int main() 
{ 
    char yourname[100]; 
    int yourage; 

    printf("Whats your name?\t"); 
    scanf("%s",yourname); //i let you read the doc to avoid overflow :) 
    printf("How old are you?\t"); 
    scanf("%d",&yourage); 
    printf("You are %d years old and your name is %s \n\n\n",yourage,yourname); 
    system("pause"); 
    return(0); 
} 
+0

Nit - 字符串不是「只是char陣列」;在C中,一個字符串是一個字符值序列,後跟一個0值的字節。字符串被存儲在char數組中,但並非所有的char數組都包含一個字符串。 – 2014-11-06 22:56:18

+0

謝謝,但如果我將100更改爲0或1或2,這不會影響程序。爲什麼? – 2014-11-06 23:16:02

+0

如果你把所有字符放到0就會覆蓋某處的數據。如果您將數據寫入未分配給您的程序的內存中,則會崩潰。 char yourname [100]分配了你的數組,然後'yourname'是內存中的某個指針,接下來的100個單元就是爲你分配的數組。 不要忘記字符串在結尾處有一個以null結尾的字符('\ 0')。所以總是保持和這個額外的細胞。 – crashxxl 2014-11-07 02:08:59

0

名稱應該是一個chracter陣列,我的意思是字符串。所以,你可以創造一個字符串,例如:

char yourname[30]; 
. 
. 
scanf("%s", &yourname); 
. 
. 
printf("your name is %s\n",yourname); 
0

這應該爲你工作:

#include <stdio.h> 

int main() { 
    char yourname[20]; 
    int yourage; 

    printf("Whats your name?\t"); 
    scanf("%18[^\n]s", yourname); 

    yourname[19] = '\0'; 
    fflush(stdin); 

    printf("How old are you?\t"); 
    scanf(" %d",&yourage); 

    printf("You are %d years old and your name is %s\n\n\n", yourage, yourname); 

    system("pause"); 
    return(0); 
}