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

C: Count letters until specific entry inserted

我对 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 放在哪里并不重要,它需要时间。

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

我几乎认为这是延迟的低效编码。

你们都是救星!!!

从第一个 scanf()

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

感谢@remyable,\nscanf() 中有不同的含义 - 不是您在这里 阅读换行符 所期望的意思。参考 C-faq 12.17

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

代码有多个问题

  • while 语句在 word 初始化之前使用 word
  • scanf 不限制写入的字符数 进入 word
  • strlen 只能 return 一个数字 >50 如果你超出缓冲区
  • 代码只重新提示一次,它应该重新提示直到用户正确