发布网友 发布时间:2022-05-16 03:29
共2个回答
热心网友 时间:2023-10-10 00:43
#include <stdio.h>
#include <string.h>
void CompareInt(int* a, int* b, int* c)
{
if( *a >= *b && *a >= *c )
{
if( *b >= *c )
{
printf("%d %d %d", *c, *b, *a);
}
else
{
printf("%d %d %d", *b, *c, *a);
}
}
if( *b >= *a && *b >= *c )
{
if( *a >= *c )
{
printf("%d %d %d", *c, *a, *b);
}
else
{
printf("%d %d %d",*a, *c, *b);
}
}
if( *c >= *a && *c >= *b )
{
if( *a >= *b )
{
printf("%d %d %d",*b, *a, *c);
}
else
{
printf("%d %d %d",*a, *b, *c);
}
}
}
void CompareChar(char* a, char* b, char* c)
{
bool key = false;
if( (strcmp(a,b)>=0 && strcmp(a,c)>=0) )//strcmp(a,c)==0?
{
if(strcmp(b,c)>=0)
{
printf("%s %s %s",c, b, a);
key = true;
}
else
{
printf("%s %s %s",b, c, a);
key = true;
}
}
if( (strcmp(b,a)>=0) && (strcmp(b,c)>=0) )
{
if(key)
{}
else if(strcmp(a,c)>=0)
{
printf("%s %s %s",c,a,b);
key=true;
}
else
{
printf("%s %s %s",a,c,b);
key=true;
}
}
if((strcmp(c,a)>=0) && (strcmp(c,b)>=0))
{
if(key)
{}
else if(strcmp(a,b)>=0)
{
printf("%s %s %s",b,a,c);
}
else
{
printf("%s %s %s",a,b,c);
}
}
}
int main(void)
{
int a = 0, b = 0, c = 0;
printf("please input three numbers:");
scanf("%d %d %d",&a, &b, &c);
CompareInt(&a, &b, &c);//这一部分以前是注释掉的。
char a1[20],b1[20],c1[20];
printf("\nplease input three strings:");
scanf("%s%s%s",&a, &b, &c);
CompareChar(a1, b1, c1);//?
return 0;
}
strcmp(a,b)的返回值有三种可能:-1,0,1。分别表示比较的字符串a<b,a=b,a>b(这里的符号表示字符串的字典顺序)。所以(strcmp(a,b)==1||strcmp(a,b)==0就相当于整数的a >= b
按照字符串的字典顺序frank<true<zjx,比较的规则是先比第一个字母,如果相同比第二个字母。这几个字符串第一个字母就可以确定顺序 f < t < z
if (key)这个key是一个标志位,如果之前已经比较出来了就设置为true,如果之前的if里已经设置好了,那么后面的if就不会执行任何东西了。这种写法完全没有必要,用if else嵌套一下会更好。
扩展资料:
非格式化顺序I/O处理器假定是128字节的记录,任何非格式化的一个顺序I/O文件的I/O把记录指针定位在128字节物理记录的结束处,如果所读的字节数不同于原来的字节数,就可能产生不希望的结果。
例如:假定几个180字节的记录写入一个非格式化顺序文件。并假定有100个字节是从文件中第180个字节的记录中读,那么,这100个字节的记录被输入并赋值给I/O列表中的元素。记录指针则定位在下一个128字节物理记录的开始。注意,这将导致在随后的读语句中开始读时,读了额外的数据,而不会跳过额外的数据。
避免这种情况发生的最好方法是保持输入记录和输出记录长度一样。如果遵守简单的预防措施,则利用非格式化顺序I/O就可以传输大于128字节的记录。
参考资料来源:百度百科-顺序输入
热心网友 时间:2023-10-10 00:43
你定义的swap有3个参数,但是使用的时候只写了两个