我想编写代码,用户输入5个输入并按升序排序,如果用户输入-1则终止。
我已经完成了冒泡排序,但我无法实现if结构。
我的语法有问题吗?
如果不是,那么我可以使用哪种结构使其有效?
当我运行它时,它会在“else”错误之前给出预期的主要表达。
#include <stdio.h>
#include <conio.h>
main()
{
int n[10];
int i,j,temp;
for(i=0;i<5;i++)/*Wating to user */
{
printf("%d. Sayi giriniz(Enter NUmber)",i+1);
scanf("%d",&n[i]);
}
if(n[i] != -1)
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(n[i]>n[j])
{
temp=n[i];
n[i]=n[j];
n[j]=temp;
}
printf("\n");
for(i=0;i<5;i++)
printf("%d. sayı(number):%d\n",i+1,n[i]);
else
{
break;
}
getch();
return 0;
}
#include <stdio.h>
#include <conio.h>
main()
{
int n[10];
int i,j,temp;
for(i=0;i<5;i++)/*Wating to user */
{
printf("%d. Sayi giriniz(Enter NUmber)",i+1);
scanf("%d",&n[i]);
}
if(n[i] != -1)
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(n[i]>n[j])
{
temp=n[i];
n[i]=n[j];
n[j]=temp;
}
printf("\n");
for(i=0;i<5;i++)
printf("%d. sayı(number):%d\n",i+1,n[i]);
else
{
break;
}
getch();
return 0;
}
答案 0 :(得分:1)
我已经在编译器看到它时缩进了你的程序,并带有注释:
int main()
{
int n[10];
int i,j,temp;
for(i=0;i<5;i++)/*Wating to user */
{
printf("%d. Sayi giriniz(Enter NUmber)",i+1);
scanf("%d",&n[i]);
}
if(n[i] != -1)
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(n[i]>n[j])
{
temp=n[i];
n[i]=n[j];
n[j]=temp;
}
/* Loop ends */
/* Loop ends */
/* If ends */
printf("\n");
for(i=0;i<5;i++)
printf("%d. sayı(number):%d\n",i+1,n[i]);
else /* Else for what if? */
{
break;
}
getch();
return 0;
}
应该很容易看出这里的错误。
答案 1 :(得分:0)
你的初始for循环以i = 5结束。之后你测试n [i],所以n [5]没有初始化。你应该在循环中测试n [i]并在它是-1时断开。
在循环中定义变量可以避免这些错误:
for(int i = 0; i < 5; ++i) {
...
}
额外提示:尝试正确缩进代码:
#include<stdio.h>
#include<conio.h>
main()
{
int n[10];
int i,j,temp;
for(i=0;i<5;i++)/*Wating to user */
{
printf("%d. Sayi giriniz(Enter NUmber)",i+1);
scanf("%d",&n[i]);
}
if(n[i] != -1)
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(n[i]>n[j])
{
temp=n[i];
n[i]=n[j];
n[j]=temp;
}
printf("\n");
for(i=0;i<5;i++)
printf("%d. say?(number):%d\n",i+1,n[i]);
// I don't understand how this compiles, this else is not attached
// to any if.
else
{
break;
}
getch();
return 0;
}
您可以这样修理:
#include<stdio.h>
#include<conio.h>
#define NUMBER_OF_NUMBERS 5
int main()
{
int n[NUMBER_OF_NUMBERS];
for(int i=0;i<NUMBER_OF_NUMBERS;i++) // User enters 5 digits.
{
printf("%d. Sayi giriniz(Enter NUmber)",i+1);
scanf("%d",&n[i]);
if(n[i] == -1)
return 1;
}
// Sort
for(int i=0;i<NUMBER_OF_NUMBERS - 1;i++)
for(int j=i+1;j<NUMBER_OF_NUMBERS;j++)
if(n[i]>n[j])
{
int temp=n[i];
n[i]=n[j];
n[j]=temp;
}
printf("\n");
for(int i=0;i<NUMBER_OF_NUMBERS;i++)
printf("%d. say?(number):%d\n",i+1,n[i]);
return 0;
}
答案 2 :(得分:0)
正确的代码如下。如果用户在五个输入之前输入-1,请参阅我已采用大小变量。
#include<conio.h>
#include<stdio.h>
main()
{
int n[10];
int i,j,temp;
for(i=0; i<5; i++) /*Wating to user */
{
printf("%d. Sayi giriniz(Enter NUmber)",i+1);
scanf("%d",&n[i]);
if(n[i]==-1)
break;
}
int size = i;
for(i=0; i<size-1; i++)
for(j=i+1; j<size; j++)
if(n[i]>n[j])
{
temp=n[i];
n[i]=n[j];
n[j]=temp;
}
printf("\n");
for(i=0; i<size; i++)
printf("%d. sayı(number):%d\n",i+1,n[i]);
return 0;
}
如果你想要5个输入,那么你不需要打破,因为循环会在五个输入后自行终止。