C:计数字母,直到插入特定条目

时间:2015-01-27 04:10:02

标签: c strcmp strlen

我在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放在哪里,都需要时间。

有人可以向我解释为什么它这么慢,并建议我可以实施一种方法来加快速度吗?这是一项学校作业,请不要直接回答,而是引导我进入我应该思考的方式? :)

我几乎认为这是一种带有延迟的低效编码。

你们都是救命的人!!!

2 个答案:

答案 0 :(得分:5)

从第一个\n

中删除scanf()
scanf("%s\n", word);
#---------^

感谢@remyable,\nscanf()中有不同的含义 - 不是您期望阅读换行符的那个。请参阅C-faq 12.17

此外,检查超过50个不正确的字符的输入。你会进入缓冲区溢出。寻找不同的方法来限制它。

答案 1 :(得分:1)

代码有多个问题

  • while语句在word初始化之前使用word
  • scanf并不限制写入的字符数 进入word
  • strlen只有在你超越缓冲区时才能返回一个数字>50
  • 代码只会重新尝试一次,它应该重新提示,直到用户正确