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,\n
在 scanf()
中有不同的含义 - 不是您在这里 阅读换行符 所期望的意思。参考 C-faq 12.17
此外,正在检查是否有超过 50 个字符的输入不正确。你会进入缓冲区溢出。寻找不同的方式来限制它。
代码有多个问题
while
语句在 word
初始化之前使用 word
-
scanf
不限制写入的字符数
进入 word
strlen
只能 return 一个数字 >50
如果你超出缓冲区
- 代码只重新提示一次,它应该重新提示直到用户正确
我对 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,\n
在 scanf()
中有不同的含义 - 不是您在这里 阅读换行符 所期望的意思。参考 C-faq 12.17
此外,正在检查是否有超过 50 个字符的输入不正确。你会进入缓冲区溢出。寻找不同的方式来限制它。
代码有多个问题
while
语句在word
初始化之前使用word
-
scanf
不限制写入的字符数 进入word
strlen
只能 return 一个数字>50
如果你超出缓冲区- 代码只重新提示一次,它应该重新提示直到用户正确