구조체 정렬에 문제가 있습니다.
브랜드 ( 'Marke'), 모델 ( 'Modelis') 및 가격 ( 'Kaina')과 같은 정보가있는 자동차 구조가 있습니다. 사용자가이 브랜드, 모델 및 가격을 입력하면 프로그램은 가장 작은 것부터 가장 큰 것까지 가격을 기준으로 해당 배열을 정렬하고 정렬 된 배열 char brand
및 char model
.
먼저 10 개의 배열로 정렬 스크립트를 테스트했습니다. 그런 다음 가격이 다음과 같이 배열 된 3 개의 배열로 테스트했습니다 '200' '300' '100'
.-잘 작동합니다. 그러나 사용자가 다음과 같이 내림차순으로 가격을 입력하자마자 : '300' '200' '100'
-올바른 방식으로 정렬되지 않고 내가 얻는 것은 : '100' '300' '200'
. 다음은 전체 스크립트입니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Automobiliai {
char Marke[20];
char Modelis[20];
float Kaina;
};
struct Automobiliai Prijungti(char *_marke, char *_modelis){
struct Automobiliai p;
strcpy(p.Marke, _marke);
strcpy(p.Modelis, _modelis);
return p;
};
int main()
{
struct Automobiliai automobilis[3];
for(int i = 0; i < 3; i++){
printf("%d automobilis: Marke Modelis Kaina \n", i+1);
scanf("%s %s %f", automobilis[i].Marke, automobilis[i].Modelis, &automobilis[i].Kaina);
}
struct Automobiliai _automobilis[3];
for(int i = 0; i < 3; i++){
for(int j = i + 1; j < 3; j++){
if(automobilis[i].Kaina > automobilis[j].Kaina){
_automobilis[i] = Prijungti(automobilis[i].Marke, automobilis[i].Modelis);
automobilis[i] = Prijungti(automobilis[j].Marke, automobilis[j].Modelis);
automobilis[j] = Prijungti(_automobilis[i].Marke, _automobilis[i].Modelis);
}
}
}
printf("Automobiliu markes modelio kainos atzvilgiu tvarka: \n");
for(int i = 0; i < 3; i++){
printf("%s %s\n", automobilis[i].Marke, automobilis[i].Modelis);
}
}
좀 더 구체적으로 말하자면 이것은 내가 문제가있는 코드의 일부입니다.
for(int i = 0; i < 3; i++){
for(int j = i + 1; j < 3; j++){
if(automobilis[i].Kaina > automobilis[j].Kaina){
_automobilis[i] = Prijungti(automobilis[i].Marke, automobilis[i].Modelis);
automobilis[i] = Prijungti(automobilis[j].Marke, automobilis[j].Modelis);
automobilis[j] = Prijungti(_automobilis[i].Marke, _automobilis[i].Modelis);
}
}
}
왜 이런 일이 일어나는지 상상할 수 있고 한 가지 조건을 더 추가해야한다고 생각 if
하지만 이미 머리가 int a = 0;
아파서 루프 바로 전에 변수를 만드는 것 이상으로 생각할 수 없습니다. 루프 를 다시 만드는 방법은 다음 과 같습니다.
for(int i = 0; i < 3; i++){
for(int j = i + 1; j < 3; j++){
if(automobilis[i].Kaina > a){
a = automobilis[j].Kaina;
_automobilis[i] = Prijungti(automobilis[i].Marke, automobilis[i].Modelis);
automobilis[i] = Prijungti(automobilis[j].Marke, automobilis[j].Modelis);
automobilis[j] = Prijungti(_automobilis[i].Marke, _automobilis[i].Modelis);
}
}
}
그러나 그것은 이것을 해결하지 못합니다.
임시 변수를 사용하여 이와 같이 오름차순을
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Automobiliai
{
char Marke[20];
char Modelis[20];
float Kaina;
}Automobiliai;
int main()
{
Automobiliai automobilis[3];
for(int i = 0; i < 3; i++)
{
printf("%d automobilis: Marke Modelis Kaina \n", i+1);
scanf("%s %s %f", automobilis[i].Marke, automobilis[i].Modelis, &automobilis[i].Kaina);
}
Automobiliai temp;
for(int i = 0; i < 3; i++)
{
for(int j = i + 1; j < 3; j++)
{
if(automobilis[i].Kaina > automobilis[j].Kaina)
{
temp = automobilis[j];
automobilis[j]=automobilis[i];
automobilis[i]=temp;
}
}
}
printf("Automobiliu markes modelio kainos atzvilgiu tvarka: \n");
for(int i = 0; i < 3; i++)
{
printf("%s %s\n", automobilis[i].Marke, automobilis[i].Modelis);
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다