2016-06-08 37 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以字符串形式输入。也有不使用&的。由于数组名称表示为基地址。 –