鱼C论坛

 找回密码
 立即注册
查看: 913|回复: 14

[已解决]超级简单

[复制链接]
发表于 2020-11-24 16:40:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

//各位盆友,我这是想要实现输入6句话,输出里面最长和最短的话。为什么输不出来啊?
最佳答案
2020-11-25 23:39:05
严凯 发表于 2020-11-25 17:37
你这个可以运行,但是我那个错在哪里啊?

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

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

第一个程序也是长度的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-24 17:16:01 | 显示全部楼层
char a[2][3]这玩意只能存字符
scanf("%s",a[i][j]); 还有这样写对么,&a[i][j]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 17:31:29 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(void)
  4. {
  5.         char ch[6][100];
  6.         int i,min,max,n_min,n_max;
  7.         for (i = 0; i < 6; i++)
  8.                 scanf("%s", ch[i]);
  9.         for (i = 0, min = 100, max = 0; i < 6; i++)
  10.         {
  11.                 if (strlen(ch[i]) < min)
  12.                 {
  13.                         min = strlen(ch[i]);
  14.                         n_min = i;
  15.                 }
  16.                 if (strlen(ch[i]) > max)
  17.                 {
  18.                         max = strlen(ch[i]);
  19.                         n_max = i;
  20.                 }

  21.         }
  22.         printf("最长的字符串是%s,最短的字符串是%s\n", ch[n_max],ch[n_min]);
  23.         return 0;
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-24 17:32:45 | 显示全部楼层
youxiaoyaooo 发表于 2020-11-24 17:16
char a[2][3]这玩意只能存字符
scanf("%s",a[j]); 还有这样写对么,&a[j]

大哥,你打一个看看,如果可以运行(和我这个差不多的·程序),马上给你最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 17:37:04 | 显示全部楼层
youxiaoyaooo 发表于 2020-11-24 17:16
char a[2][3]这玩意只能存字符
scanf("%s",a[j]); 还有这样写对么,&a[j]

数组名就是地址,不需要&
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 17:55:44 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-24 19:54 编辑
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         char a[12][256]                                        ;
  5.         int b , e , i , k , m , n = 6 , min , max              ;
  6.         for(k = 0 ; k < n ; k ++) {
  7.                 fgets(a[k] , 256 , stdin)                      ;
  8.                 for(m = 0 ; a[k][m] && a[k][m] != '\n' ; m ++) ;
  9.                 if(a[k][m] == '\n') a[k][m] = '\0'             ;
  10.                 if(! k) {
  11.                         min = max = m                          ;
  12.                         b = e = k                              ;
  13.                 } else {
  14.                         if(m < min) {
  15.                                 min = m                        ;
  16.                                 b = k                          ;
  17.                         } else if(m > max) {
  18.                                 max = m                        ;
  19.                                 e = k                          ;
  20.                         }
  21.                 }
  22.         }
  23.         printf("%2d\t%s\n" , min , a[b])                       ;
  24.         printf("%2d\t%s\n" , max , a[e])                       ;
  25. }
复制代码

        编译、运行实况
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. ABCDEFGHIJKL
  4. 1234
  5. defghijklmnopqr
  6. 11223344
  7. ABC
  8. abcdef
  9. 3      ABC
  10. 15      defghijklmnopqr

  11. D:\00.Excise\C>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 10:22:57 | 显示全部楼层
数组一个元素占四个字节,让然后你要提前算一下你的输入是不是超字节了,然后你第二个for比较时会出现a[1]和a[1][1]比较这种情况,所以数不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 15:33:46 | 显示全部楼层

大佬,你看我这个哪里出错了
#include<stdio.h>
#include<string.h>
int main()
{
        char ch[6][100];
        int i,max,min,n_min,n_max;
        for(i=0;i<6;i++)
                scanf("%s",ch);
        min=strlen(ch[0]);
        max=strlen(ch[0]);
        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[n_min],ch[n_max]);
        return 0;
}

//min可以打印,max打印不出来,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 17:02:34 | 显示全部楼层

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

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
昨非 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 17:16:51 | 显示全部楼层
严凯 发表于 2020-11-25 15:33
大佬,你看我这个哪里出错了
#include
#include

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

  3. int main()
  4. {
  5.         char ch[6][100]                                     ;
  6.         int i , max , min                                   ;
  7.         for(i = 0 ; i < 6 ; i ++) scanf("%s" , ch[i])       ;
  8.         min = max = 0                                       ;
  9.         for(i = 1 ; i < 6 ; i ++)
  10.         {
  11.                 if(strlen(ch[min]) > strlen(ch[i])) min = i ;
  12.                 if(strlen(ch[max]) < strlen(ch[i])) max = i ;
  13.         }
  14.         printf("%s  %s" , ch[min] , ch[max])                ;
  15. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 17:37:16 | 显示全部楼层
jackz007 发表于 2020-11-25 17:16
帮你改了一下你可以测试一下:

你这个可以运行,但是我那个错在哪里啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 18:03:01 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-25 18:04 编辑
严凯 发表于 2020-11-25 17:37
你这个可以运行,但是我那个错在哪里啊?


       你的代码逻辑基本正确,主要问题出在变量 n_min 和 n_max 没有赋初值,而是完全依赖在字符串长度比较过程中来进行赋值,这就会有一个问题,比较前,假定的是 ch[0] 同时是最长和最短的字符串,这个没有问题,但是,一旦这个假设中有任何一个成立,那么,n_min 和 n_max 就会有一个不会被赋值,从而导致最终显示的时候字符数组索引失控。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 23:39:05 | 显示全部楼层    本楼为最佳答案   
严凯 发表于 2020-11-25 17:37
你这个可以运行,但是我那个错在哪里啊?

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

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

第一个程序也是长度的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 08:58:37 | 显示全部楼层
风过无痕1989 发表于 2020-11-25 23:39
你定义的是二维数组,长度不能按一维数组来求,否则就出错:"char (*)[100]" 类型的实参与 "const char * ...

那我改怎么改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-26 10:08:28 | 显示全部楼层
严凯 发表于 2020-11-26 08:58
那我改怎么改?

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

数组名.length指示数组的行数。
数组名[行下标] .length指示该行中的元素个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 21:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表