如何在C语言中将字符输入存入数组?

5
char name[2];
scanf("%c",name);
printf("%c",name);

我刚开始学习C语言。我对上面的代码很好奇,从printf输出得到的不是我输入的字符,而是一些看起来很奇怪的符号。请问有人可以解释一下吗?


'name' 是一个数组,而 '%c' 需要一个 'char' (实际上需要一个 'int' 参数);如果要打印一个 'char',则可以使用 printf("%c", name[0]); 这个例子。 - ad absurdum
如果您需要将字符数组作为输入,请使用scanf(“%s”,name),printf(“%s”,name);而不是使用%c。%c返回指向字符的指针,无法存储在字符数组的指针中。 - sourabh1024
scanf("%c",name) ==> scanf("%s",name),printf("%c",name) ==> printf("%s",name); - Pushan Gupta
名称不是 char,而是 char [2]。更改 printf 格式。 - CIsForCookies
@sourabh1024 什么?%c 返回指向什么的指针? - Ajay Brahmakshatriya
4个回答

5
对于% c说明符,scanf需要存储字符的位置的地址,但printf需要字符的值,而不是它的地址。在C中,引用数组时,数组会衰减为指向数组第一个元素的指针。因此,scanf被传递了name数组第一个元素的地址,这是字符将被存储的地方;然而,printf也正在传递该地址,这是错误的。 printf应该像这样:
printf("%c", name[0]);

请注意,scanf参数在技术上是可以的,但传递一个数组有些奇怪,而只需传递单个字符的指针即可。最好声明一个单独的字符并明确传递其地址:
char c;
scanf("%c", &c);
printf("%c", c);

另一方面,如果你想读取一个字符串而不是单个字符,则应该使用 %s 而不是 %c


3

读取单个字符

char name[2];
scanf("%c",name);
printf("%c",name[0]);

或者读取一个字符串

char name[2];
scanf("%1s",name);
printf("%s",name);

0

由于名称包含2个元素,您需要使用%s。%c用于单个字符,因此如果您希望用户输入例如“as”(不带“”),并且程序将其打印出来,则需要使用%s。

char name[2];

scanf(" %s", name);
printf("%s",name);

4
scanf(" %s", name);中的空格是不必要的。它会清除任何前导空格,但在使用%s格式时,这也会自动发生。但在问题中使用%c格式时,通常需要包含该空格,因为在这种情况下,除非包括该空格,否则不会清除空格。 - Weather Vane
@WeatherVane 那只是我学习编程的方式,一直伴随着我 :D - IP002

-2

如果你输入的字符少于或等于两个,则会得到与输入相同的正确输出,但如果输入的字符数大于3,则无法正常工作。


要读取一个包含更多字符的字符串,只需将字符数组增加到a [300]或a [字符串中的字符数]。 - ajetias
这个回答没有回应到问题的本质,也与问题的行为无关。该问题涉及到限定符而不是输入大小。 - Miket25

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接