想问一下这个程序有什么问题
/*编写程序用来找到一组单词中“最大”单词和“最小”单词。当用户输入单词后,程序根据字典的排序顺序决定排在最前面和最后面的单词。当用户输入了4个字母的单词时,程序必须停止读入。假设所有单词都不超过20个字母。程序与用户的交互显示如下所示:Enter word:dog
Enter word:zebra
Enter word:rabbit
Enter word:catfish
Enter word:walrus
Enter word:cat
Enter word:fish
Smallest word: cat
Largest word: zebra
提示:使用两个名为smallest_word和largest_word的字符串来记录当前输入的“最小”单词和“最大”单词。每次用户输入新单词,就用strcmp函数把它与smallest_word进行比较。如果新的单词比smallest_word“小”,就用strcpy函数把新单词保存到smallest_word中。用类似的方式与larges_word也进行比较。用strlen函数来判断用户输入4个字母的单词的时候。*/
#include<stdio.h>
#include<string.h>
int main()
{
char smallest_word,largest_word;
char a;
loop:{
printf("Enter word:");
scanf("%s",a);
if(strcmp(smallest_word,a)>0)
{
strcpy(smallest_word,a);
}
if(strcmp(largest_word,a)<0)
{
strcpy(largest_word,a);
}}
if(strlen(a)!=4)
goto loop;
printf("smallest word:");
puts(smallest_word);
printf("largest word:");
puts(largest_word);
}
首先,现在最好别用goto loop这个写法了。其次吧,按你题目的要求,只要字母达到四个就会停止,那么到zebra就直接终止了。 本帖最后由 jackz007 于 2020-12-30 23:28 编辑
最大的问题就是 goto loop 语句,这种语句在结构化编程中是添乱和起副作用的东西。
#include<stdio.h>
#include<string.h>
int main(void)
{
char a , smallest_word , largest_word ;
int i , m ;
for(i = m = 0 ; m != 4 ; i ++) {
printf("Enter word : ") ;
for(m = 0 ; (a = getchar()) != '\n' && m < 19 ; m ++) ;
a = '\0' ;
if(! i) {
strcpy(smallest_word , a) ;
strcpy(largest_word , a) ;
} else {
if(strcmp(a , largest_word) > 0) strcpy(largest_word , a) ;
else if(strcmp(a , smallest_word) < 0) strcpy(smallest_word , a) ;
}
}
printf("smallest word : %s\n" , smallest_word) ;
printf(" largest word : %s\n" , largest_word) ;
}
页:
[1]