【发布时间】:2018-08-22 05:12:10
【问题描述】:
我正在做 c 类介绍的作业,所以我的知识仍然很少,请多多关照。我有
scanf(" %20s", contact.name");
printf("Do you want to enter a middle name?");
scanf(" %c", doYouWant");
如果第一个 scanf 超过 20 个字符,这些字符将作为下一个 scanf 的输入。如果我使用 %s 那么它将接受整行,但会比分配的内存更长。
我需要获取第一个输入并存储在我的结构中,然后问下一个问题。如何正确避免将字符 21+ 用作下一个问题的输入,同时将其限制为 20 个字符。
【问题讨论】:
-
只需使用 %s 并获取他们键入的数量,然后截断为 20。
-
如果输入太长,无论如何都无法继续。使用长度为 25 的输入字符串。
scanf("%24s", inpstring);如果输入的字符串长于20,则中止。否则strcpy(contact.name, inpstring);注意,contact.name结构成员应该定义为char name[21]; -
我应该提到我们还没有学习过字符串函数,并且预计不会将它们用于此作业。这就是 in 想要做的,但被告知我不能在这里。感谢您提供的信息,至少我知道我的想法是正确的,即使我还不能使用它。使用 %20s%*s 已经成功了。
-
不,请在您的答案下查看评论。
-
您最大的问题将是
%s格式说明符 读取到第一个空格留下任何额外的字符,以及尾随的"\n"在输入缓冲区中。您对" %c"的下一次调用将仅因格式字符串 中的初始空格而忽略前导空格,而不会忽略任何其他字符。您应该在下一次scanf调用之前清空-stdin,例如for (int c = getchar(); c != '\n' && c != EOF; c = getchar()} {}