超级简单
#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句话,输出里面最长和最短的话。为什么输不出来啊? char a这玩意只能存字符
scanf("%s",a); 还有这样写对么,&a
#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;
} youxiaoyaooo 发表于 2020-11-24 17:16
char a这玩意只能存字符
scanf("%s",a); 还有这样写对么,&a
大哥,你打一个看看,如果可以运行(和我这个差不多的·程序),马上给你最佳 youxiaoyaooo 发表于 2020-11-24 17:16
char a这玩意只能存字符
scanf("%s",a); 还有这样写对么,&a
数组名就是地址,不需要& 本帖最后由 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> 数组一个元素占四个字节,让然后你要提前算一下你的输入是不是超字节了,然后你第二个for比较时会出现a和a比较这种情况,所以数不出来 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打印不出来, jackz007 发表于 2020-11-24 17:55
编译、运行实况
还是感谢大佬,但是你写的,我有些都没有学过,看不懂{:10_266:} 严凯 发表于 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) ;
}
jackz007 发表于 2020-11-25 17:16
帮你改了一下你可以测试一下:
你这个可以运行,但是我那个错在哪里啊? 本帖最后由 jackz007 于 2020-11-25 18:04 编辑
严凯 发表于 2020-11-25 17:37
你这个可以运行,但是我那个错在哪里啊?
你的代码逻辑基本正确,主要问题出在变量 n_min 和 n_max 没有赋初值,而是完全依赖在字符串长度比较过程中来进行赋值,这就会有一个问题,比较前,假定的是 ch 同时是最长和最短的字符串,这个没有问题,但是,一旦这个假设中有任何一个成立,那么,n_min 和 n_max 就会有一个不会被赋值,从而导致最终显示的时候字符数组索引失控。 严凯 发表于 2020-11-25 17:37
你这个可以运行,但是我那个错在哪里啊?
你定义的是二维数组,长度不能按一维数组来求,否则就出错:"char (*)" 类型的实参与 "const char *" 类型的形参不兼容
第二个程序(8 楼的程序)的第13行、第15行、第18行、第20行都是错误的
第一个程序也是长度的问题
风过无痕1989 发表于 2020-11-25 23:39
你定义的是二维数组,长度不能按一维数组来求,否则就出错:"char (*)" 类型的实参与 "const char * ...
那我改怎么改?
严凯 发表于 2020-11-26 08:58
那我改怎么改?
我还真没有求过这个长度,你按下面的方法试试
数组名.length指示数组的行数。
数组名[行下标] .length指示该行中的元素个数。
页:
[1]