例如,如果我输入“qwer”,这将为输出返回“er”。如果我只在[2]中请求用户,为什么“r”也是输出的?
另外,有没有比“char userIn[256]”更脏的替代品?在我看来,256个限制预先确定了用户可以输入什么,这是不好的。但我不知道如何使用户不具有预定的大小。

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

最佳答案

你不是在要求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个字符。
备注:如评论中所述,您的scanf呼叫不正确。它应该是scanf("%s", userIn)scanf("%s", &userIn[0]),但不是你现在拥有的。你现在拥有的通常是“工作”的,但是指针的类型仍然不正确。许多编译器会对此发出警告。

关于c - printf打印数组的多个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19009669/

10-12 13:29