在C中调用函数
这是我的密码在C中调用函数,c,C,这是我的密码 #include<stdio.h> orders_char(int c1, int c2, int c3); void orders_char(int c1, int c2, int c3) { if(c1 < c2) if(c2 < c3) printf("Ordered characters are: %c %c %c", c1, c2, c3);
#include<stdio.h>
orders_char(int c1, int c2, int c3);
void orders_char(int c1, int c2, int c3)
{
if(c1 < c2)
if(c2 < c3)
printf("Ordered characters are: %c %c %c", c1, c2, c3);
else if(c3 < c2 && c1 < c3)
printf("Ordered characters are: %c %c %c", c1, c3, c2);
else if(c2 < c1
if(c1 < c3)
printf("Ordered characters are: %c %c %c", c2, c1, c3);
else if(c3 < c1 && c3 < c2)
printf("Ordered characters are: %c %c %c", c3, c2, c1);
else if(c1 > c3)
if (c3 < c2 && c2 > c1)
printf("Ordered characters are: %c %c %c", c3, c1, c2);
else if(c3 > c2 && c2 < c1)
printf("Ordered characters are: %c %c %c", c2, c3, c1);
return;
}
int main(void)
{
char c1, c2 ,c3;
int i = 65;
printf("Please enter 3 capital letters with no spaces: \n");
scanf("%c%c%c", &c1, &c2, &c3);
orders_char(c1, c2, c3);
return 0;
}
因为没有任何内容,它默认为int
再见,
贝科
编辑:
顺便说一句,你需要一个支架
else if(c2 < c1
else如果(c2
此外,您没有匹配if's-else's。else将始终与附近的if匹配。因此:
if(a>b)
if(b>c)
printf("a>b>c");
else
printf("a<=b"); // <<== wrong! This else matches with if(b>c)
if(a>b)
如果(b>c)
printf(“a>b>c”);
其他的
printf(“ab>c”);
}
其他的
printf(“a我可以看到两个错误:
One:
orders_char(int c1, int c2, int c3);
else if(c2 < c1
应该是
void orders_char(int c1, int c2, int c3);
如果不指定函数的返回类型,编译器将假定int
。因此,当它看到函数返回void
时,它会抱怨您无法下定决心
两个:
orders_char(int c1, int c2, int c3);
else if(c2 < c1
else如果(c2
缺少结束页。右上方:
orders_char(int c1, int c2, int c3);
void orders_char(int c1, int c2, int c3)
{ //...
首先声明然后定义一个函数
但是您的声明缺少返回类型(第一个警告),编译器将默认返回int
,因此与定义不同(第一个错误)
一般来说,c编译器随后会发出一系列错误消息,因此在读取错误消息时,您应该只查看第一个(或者两个)。您不需要第三行的orders\u char。这不是一个合适的原型(因为返回类型推断为int)不管怎样,在main()之前,你已经有了函数的完整定义。你真的应该对if
表达式使用{}
。我通过formatter运行了你的代码,它清楚地表明if
和else if
没有按照你希望的方式工作
编辑:
- 您必须考虑很多情况-这三个变量只有六种可能的排序顺序
- 您使用int表示字符,但这样做并不好-最好使用
char
表示字符
当然,它不会返回任何东西
您没有满足第一个if条件:
if (c1 < c2) {
//all your code is here
}
if(c1
无意冒犯,但这是基本的调试技巧。首先检查字符是否按预期输入,可能在调用orders_char()之前使用printf()。其次,您应该使用std::sort()来完成您尝试执行的操作
std::向量vC;
vC.推回(c1);
vC.推回(c2);
vC.推回(c3);
std::sort(vC.begin(),vC.end())
或者类似的东西。您可以在最喜欢的浏览器中搜索std::sort()
祝你好运。C在比较字符时使用ASCII值。这里有一个像样的ASCII图表:
sar的值是83,65,82。所以你的第一个if基本上是:
if (83 < 65)
编辑:我应该说,这可能是不使用内置工具或第三方工具的最直接的方法。显然有比这更快的排序算法。更简单的实现:
#include <stdio.h>
#include <stdlib.h>
void orders_char (int c1, int c2, int c3);
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
void orders_char (int c1, int c2, int c3)
{
int a[] = {c1, c2, c3};
qsort(a, 3, sizeof(int), compare);
printf("Ordered characters are: %c %c %c\n", a[0], a[1], a[2]);
}
int main (void)
{
char c1, c2, c3;
int i = 65;
printf("Please enter 3 capital letters with no spaces: \n");
scanf("%c%c%c", &c1, &c2, &c3);
orders_char(c1, c2, c3);
return 0;
}
#包括
#包括
无效命令字符(int c1、int c2、int c3);
整数比较(常数无效*a,常数无效*b)
{
返回(*(int*)a-*(int*)b);
}
无效命令字符(int c1、int c2、int c3)
{
inta[]={c1,c2,c3};
qsort(a,3,sizeof(int),比较);
printf(“有序字符为:%c%c%c\n”、a[0]、a[1]、a[2]);
}
内部主(空)
{
字符c1、c2、c3;
int i=65;
printf(“请输入3个不带空格的大写字母:\n”);
scanf(“%c%c%c”、&c1、&c2和&c3);
命令_char(c1、c2、c3);
返回0;
}
一般来说,尝试和重建现有的算法是没有意义的。最好立即了解使用哪些算法
当然,有更好的方法来实现上述功能,但这是非常简单和快速的。一个else总是绑定到最接近的前一个不匹配if。缩进并不显示此处实际发生的情况
if (condition)
if (condition2)
Something;
else if (condition3)
SomethingElse;
else if (condition4)
DoMore;
是代码中实际发生的情况。若要按照您希望的方式工作,您必须这样编写:
if (condition)
{
if (condition2)
Something;
else if (condition3)
SomethingElse;
}
else if (condition4)
DoMore;
当您可以简单地展开冒泡排序时,查找序列的代码似乎相当复杂(而且,在任何人攻击冒泡排序的使用之前,您应该意识到它在某些情况下是完全可以接受的,例如数据已经大部分排序,或者数据集很小的情况下——在这些情况下,它通常会优于其他排序):
这是一种非常非常糟糕的排序三个字符的方法。最好将它们都放在一个数组中并使用它。这可能是由堆栈溢出造成的。虽然我们愿意提供帮助,但您可能希望从阅读一些开始。我会指出这个非常有用的问题,其中有很多问题。您可以特别关注悬空-else问题。当然,这并不适用,因为原始代码不是这样。有人在大括号中编辑了。问题现在又回到了最初发布的状态。函数的定义在main()之前并不重要,重要的是定义在代码中调用函数之前。
if (condition)
if (condition2)
Something;
else if (condition3)
SomethingElse;
else if (condition4)
DoMore;
if (condition)
{
if (condition2)
Something;
else if (condition3)
SomethingElse;
}
else if (condition4)
DoMore;
#include <stdio.h>
void orders_char(int c1, int c2, int c3) {
int tmp;
// Unrolled bubble sort for three elements.
if (c1 > c2) { tmp = c1; c1 = c2; c2 = tmp; }
if (c2 > c3) { tmp = c2; c2 = c3; c3 = tmp; }
if (c1 > c2) { tmp = c1; c1 = c2; c2 = tmp; }
printf("Ordered characters are: %c %c %c\n", c1, c2, c3);
}
int main (void) {
char c1, c2 ,c3;
printf("Please enter 3 capital letters with no spaces: \n");
scanf("%c%c%c", &c1, &c2, &c3);
orders_char(c1, c2, c3);
return 0;
}
pax> for i in abc acb bac bca cab cba ; do
...> echo $i | ./sort3
...> done
Ordered characters are: a b c
Ordered characters are: a b c
Ordered characters are: a b c
Ordered characters are: a b c
Ordered characters are: a b c
Ordered characters are: a b c