printf打印多个数组元素

时间:2013-09-25 15:56:16

标签: c

例如,如果我输入“qwer”,这会让我输出“呃”。如果我只是要求userIn [2]?

,如何输出“r”

另外,“char userIn [256]”是否有较少的脏选择?我看到它的方式,256限制预先确定用户可以输入什么,这是不好的。但我不知道如何使用userIn没有预定的大小。

char userIn[256];
printf("Type the message to be encoded: ");
scanf("%s", &userIn);
printf("\n");;
printf("This was typed: %s\n", &userIn[2]);

3 个答案:

答案 0 :(得分:5)

您不是要求userIn[2]。您要求从&userIn[2]开始的字符串。格式说明符%s表示“字符串”。以&userIn[2]开头的字符串确实是"er"。这就是你看到的输出。

如果您要打印单个字符,可以使用%c格式说明符并传入userIn[2]而不是&userIn[2]

printf("%c\n", userIn[2]);

或者,您可以使用%s,但在这种情况下,您必须通过精确说明符显式限制要打印的字符串的长度,如

printf("%.1s\n", &userIn[2]);

以上表示:打印字符串,但不输出超过1个字符。

P.S。正如评论中指出的那样,您的scanf来电不正确。它应该是scanf("%s", userIn)scanf("%s", &userIn[0]),而不是您现在拥有的。您现在拥有的内容通常会“正常工作”,但指针的类型仍然不正确。许多编译器会发出警告。

答案 1 :(得分:3)

您告诉printf打印字符串并为其指定第三个字符的地址。如果你这样做

printf("This was typed: %c\n", userIn[2]);

相反,它只会打印'e'。

答案 2 :(得分:0)

我相信这是因为你使用的是“%s”而不是“%c”。 %s表示以null结尾的字符串,其中%c是单个字符。在你的情况下使用%s打印“er”,因为这是从你指定的数组位置开始的字符串的其余部分,直到找到空终止字符。

替换

printf("This was typed: %s\n", &userIn[2]);

printf("This was typed: %c\n", &userIn[2]);