例如,如果我输入“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]);
答案 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]);