严凯 发表于 2020-11-24 16:40:16

超级简单

#include<stdio.h>
int main()
{
        char a;
        int i,j,min,max;
        for(i=0;i<2;i++)
        {
                for(j=0;j<3;j++)
                {
                        scanf("%s",a);
                }
        }
        min=a;
        for(i=0;i<2;i++)
        {
                for(j=1;j<3;j++)
                        {
                                if(sizeof(min)>sizeof(a))
                                min=a;
                }
        }
        max=a;
        for(i=0;i<2;i++)
        {
                for(j=1;j<3;j++)
                        {
                                if(sizeof(max)<sizeof(a))
                                max=a;
                }
        }
        printf("min=%s\n",min);
        printf("max=%s\n",max);
        return 0;
}

//各位盆友,我这是想要实现输入6句话,输出里面最长和最短的话。为什么输不出来啊?

youxiaoyaooo 发表于 2020-11-24 17:16:01

char a这玩意只能存字符
scanf("%s",a); 还有这样写对么,&a

jitianmoshen 发表于 2020-11-24 17:31:29

#include <stdio.h>
#include <string.h>
int main(void)
{
        char ch;
        int i,min,max,n_min,n_max;
        for (i = 0; i < 6; i++)
                scanf("%s", ch);
        for (i = 0, min = 100, max = 0; i < 6; i++)
        {
                if (strlen(ch) < min)
                {
                        min = strlen(ch);
                        n_min = i;
                }
                if (strlen(ch) > max)
                {
                        max = strlen(ch);
                        n_max = i;
                }

        }
        printf("最长的字符串是%s,最短的字符串是%s\n", ch,ch);
        return 0;
}

严凯 发表于 2020-11-24 17:32:45

youxiaoyaooo 发表于 2020-11-24 17:16
char a这玩意只能存字符
scanf("%s",a); 还有这样写对么,&a

大哥,你打一个看看,如果可以运行(和我这个差不多的·程序),马上给你最佳

jitianmoshen 发表于 2020-11-24 17:37:04

youxiaoyaooo 发表于 2020-11-24 17:16
char a这玩意只能存字符
scanf("%s",a); 还有这样写对么,&a

数组名就是地址,不需要&

jackz007 发表于 2020-11-24 17:55:44

本帖最后由 jackz007 于 2020-11-24 19:54 编辑

#include<stdio.h>

int main()
{
      char a                                        ;
      int b , e , i , k , m , n = 6 , min , max            ;
      for(k = 0 ; k < n ; k ++) {
                fgets(a , 256 , stdin)                      ;
                for(m = 0 ; a && a != '\n' ; m ++) ;
                if(a == '\n') a = '\0'             ;
                if(! k) {
                        min = max = m                        ;
                        b = e = k                              ;
                } else {
                        if(m < min) {
                              min = m                        ;
                              b = k                        ;
                        } else if(m > max) {
                              max = m                        ;
                              e = k                        ;
                        }
                }
      }
      printf("%2d\t%s\n" , min , a)                     ;
      printf("%2d\t%s\n" , max , a)                     ;
}
      编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
ABCDEFGHIJKL
1234
defghijklmnopqr
11223344
ABC
abcdef
3      ABC
15      defghijklmnopqr

D:\00.Excise\C>

黎明gg 发表于 2020-11-25 10:22:57

数组一个元素占四个字节,让然后你要提前算一下你的输入是不是超字节了,然后你第二个for比较时会出现a和a比较这种情况,所以数不出来

严凯 发表于 2020-11-25 15:33:46

jitianmoshen 发表于 2020-11-24 17:31


大佬,你看我这个哪里出错了
#include<stdio.h>
#include<string.h>
int main()
{
        char ch;
        int i,max,min,n_min,n_max;
        for(i=0;i<6;i++)
                scanf("%s",ch);
        min=strlen(ch);
        max=strlen(ch);
        for(i=1;i<6;i++)
        {
                if(min>strlen(ch))
                {
                        min=strlen(ch);
                n_min=i;
                }
               if(max<strlen(ch))
                {
                        max=strlen(ch);
                        n_max=i;
                }
        }
        printf("%s%s",ch,ch);
        return 0;
}

//min可以打印,max打印不出来,

严凯 发表于 2020-11-25 17:02:34

jackz007 发表于 2020-11-24 17:55
编译、运行实况

还是感谢大佬,但是你写的,我有些都没有学过,看不懂{:10_266:}

jackz007 发表于 2020-11-25 17:16:51

严凯 发表于 2020-11-25 15:33
大佬,你看我这个哪里出错了
#include
#include


帮你改了一下你可以测试一下:
#include<stdio.h>
#include<string.h>

int main()
{
      char ch                                     ;
      int i , max , min                                 ;
      for(i = 0 ; i < 6 ; i ++) scanf("%s" , ch)       ;
      min = max = 0                                       ;
      for(i = 1 ; i < 6 ; i ++)
      {
                if(strlen(ch) > strlen(ch)) min = i ;
                if(strlen(ch) < strlen(ch)) max = i ;
      }
      printf("%s%s" , ch , ch)                ;
}

严凯 发表于 2020-11-25 17:37:16

jackz007 发表于 2020-11-25 17:16
帮你改了一下你可以测试一下:

你这个可以运行,但是我那个错在哪里啊?

jackz007 发表于 2020-11-25 18:03:01

本帖最后由 jackz007 于 2020-11-25 18:04 编辑

严凯 发表于 2020-11-25 17:37
你这个可以运行,但是我那个错在哪里啊?

       你的代码逻辑基本正确,主要问题出在变量 n_min 和 n_max 没有赋初值,而是完全依赖在字符串长度比较过程中来进行赋值,这就会有一个问题,比较前,假定的是 ch 同时是最长和最短的字符串,这个没有问题,但是,一旦这个假设中有任何一个成立,那么,n_min 和 n_max 就会有一个不会被赋值,从而导致最终显示的时候字符数组索引失控。

风过无痕1989 发表于 2020-11-25 23:39:05

严凯 发表于 2020-11-25 17:37
你这个可以运行,但是我那个错在哪里啊?

你定义的是二维数组,长度不能按一维数组来求,否则就出错:"char (*)" 类型的实参与 "const char *" 类型的形参不兼容       

第二个程序(8 楼的程序)的第13行、第15行、第18行、第20行都是错误的

第一个程序也是长度的问题

严凯 发表于 2020-11-26 08:58:37

风过无痕1989 发表于 2020-11-25 23:39
你定义的是二维数组,长度不能按一维数组来求,否则就出错:"char (*)" 类型的实参与 "const char * ...

那我改怎么改?

风过无痕1989 发表于 2020-11-26 10:08:28

严凯 发表于 2020-11-26 08:58
那我改怎么改?

我还真没有求过这个长度,你按下面的方法试试

数组名.length指示数组的行数。
数组名[行下标] .length指示该行中的元素个数。
页: [1]
查看完整版本: 超级简单