gpt4 book ai didi

c - C中的简单单词比较

转载 作者:行者123 更新时间:2023-12-02 06:57:50 24 4
gpt4 key购买 nike

我刚刚用 C 语言编写了一个相当简单的程序来查找 smallest wordlargest word。我有 3 个变量如下:

char smallest[20]; // smallest word
char largest[20]; // largest word
char word[20]; // the word entered by user

然后我会提示用户输入他想要的任何单词:

while (1) {
printf("Enter a word: ");
while((ch = getchar()) != '\n') {
word[i++] = ch;
}
}

然后我将比较 wordsmallestlargest 以获得在用户中找到最小和最大单词的结果输入的单词。

if (strcmp(word, smallest) < 0) {
strcpy(smallest, word);
}

if (strcmp(word, largest) > 0) {
strcpy(largest, word);
}

最后,如果用户只是输入而不输入任何单词,程序将终止。该程序正确地找到了 largest 单词,但我的问题是找到 smallest 单词。

如果你想复制/粘贴来测试它,这里是整个程序。

#include <stdio.h>
#include <string.h>

int main(void) {

char smallest[20] = "";
char largest[20] = "";
char word[20] = "";

while (1) {

int i = 0;
char ch;

strcpy(word, "");

printf("Enter a word: ");
while((ch = getchar()) != '\n') {
word[i++] = ch;
}

if (strcmp(word, smallest) < 0) {
strcpy(smallest, word);
}

if (strcmp(word, largest) > 0) {
strcpy(largest, word);
}


if (strlen(word) == 0) break;
}

printf("Smallest word: %s\n", smallest);
printf("Largest word: %s\n", largest);

return 0;

}

能否请您告诉我如何修改它以正确找到smallestlargest 单词。

最佳答案

这个循环至少有四个问题:

  while((ch = getchar()) != '\n') {
word[i++] = ch;
}

首先,它可以覆盖数组以外的内存,其次,您必须在字符串后附加终止零。此外,您将结果保存到 char 中,但 getchar() 返回 int,并且您没有测试 EOF 但您应该这样做(使用 int ch; 非常重要,这样您就可以准确地测试 EOF)。

使用函数 fgets 而不是 getchar(但请记住它在输出中包含换行符)。

或者按照下面的方式重写循环

  while( i < 19 && (ch = getchar()) != '\n' && ch != EOF) {
word[i++] = ch;
}

word[i] = '\0';

考虑到您的代码中似乎存在拼写错误。至少我没有看到声明smallest_wordlargest_word

关于c - C中的简单单词比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com