为什么这个C代码总是输出一个笑脸?

时间:2016-06-08 00:01:28

标签: c

#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,即

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

然后在输入的第一个字符后打印@符号。例如,如果输入是“Sam”,那么输出将是“S @”。关于为什么会这样的想法?

1 个答案:

答案 0 :(得分:4)

这是未定义的行为,请尝试

scanf("%14s", name);

您将错误的参数传递给“%c”说明符,该说明符需要指向单个char的指针。相反,您需要"%s"说明符,因为name是一个数组,它自动指向它的第一个元素,因此您不需要运算符的&地址。