例如,如果我输入“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/