2014-11-06 33 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); 
}