我在C上有点生疏了。我正在学校任务,要求我制作一个程序来获取用户输入,然后打印输出。如果字符数高于50,则不打印任何内容并重新启用它们。退出不应打印计数(在本例中为4)。
这是我到目前为止所做的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main ()
{ /*Start of main*/
printf("Type any word you'd like <= 50 characters.\nType quit to exit:\n");
char word[50];
int wordLength = 0;
while (strcmp(word, "quit") != 0)
{/*open of while loop (strcmp ... != 0)*/
scanf("%s\n", word);
wordLength = strlen(word);
if (wordLength > 50)
{
printf("Try again, >= 50 characters!:\n");
scanf("%s", word);
wordLength = strlen(word);
}
printf("%d\n", wordLength);
}/*End of while loop (strcmp... != 0)*/
return 0;
}/*End of main*/
我似乎无法在提交的单词后立即获得长度。它似乎变得不稳定。它显示了在输入新单词后最后提交的单词的数字。无论我把printf放在哪里,都需要时间。
有人可以向我解释为什么它这么慢,并建议我可以实施一种方法来加快速度吗?这是一项学校作业,请不要直接回答,而是引导我进入我应该思考的方式? :)
我几乎认为这是一种带有延迟的低效编码。
你们都是救命的人!!!
答案 0 :(得分:5)
从第一个\n
scanf()
scanf("%s\n", word);
#---------^
感谢@remyable,\n
在scanf()
中有不同的含义 - 不是您期望阅读换行符的那个。请参阅C-faq 12.17
此外,检查超过50个不正确的字符的输入。你会进入缓冲区溢出。寻找不同的方法来限制它。
答案 1 :(得分:1)
代码有多个问题
while
语句在word
初始化之前使用word
scanf
并不限制写入的字符数
进入word
strlen
只有在你超越缓冲区时才能返回一个数字>50