2012-05-17 3 views
0

그래도 정렬 된 데이터가 10 진수가 아닌 정수로 출력되는 경우를 제외하면 모든 것이 작동합니다. 이것은 수정하기 쉬운 실수처럼 보이지만 그것을 찾을 수 없습니다! 예를 들어 실행에복사 된 배열 및 버블 정렬 C++

#include <iostream> 

using namespace std; 

void input (double x[], int length); 
void copy (double source[], double dest[], int length); 
void sort (double x[], int length); 
void display (double x[], int length); 
int main() 
{ 
    double data[20]; 
    double sdata[20]; 
    int itemcount; 

    cout << "Enter data item count <1-20>" << endl; 
    cin >> itemcount; 
    if ((itemcount < 1) || (itemcount > 20)) 
    { 
     cout << "Class size is NOT within required range. The required range is 1 to 20." << endl; 
     cout << "Bye." << endl; 
     return (0); 
    } 
    input (data, itemcount); 
    cout << "Original Data:" << endl; 
    copy (data, sdata, itemcount); 
    display (sdata, itemcount); 
    sort (sdata, itemcount); 
    cout << "Sorted Data" << endl; 
    display (sdata, itemcount); 

} 

void input (double x[], int length) 
{ 
    int i; 
    for (i=0; i < length; i++) 
    { 
     cout << "Enter score" << endl; 
     cin >> x[i]; 
    } 
} 

void copy (double source[], double dest[], int length) 
{ 
    int i; 
    for (i=0; i < length; i++) 
    { 
     dest[i] = source[i]; 
    } 
} 

void sort (double x[], int length) 
{ 
    int i, temp; 
    bool swapdone = true; 
    while (swapdone) 
    { 
     swapdone = false; 
     for (i=0; i < length-1; i++) 
     { 
      if (x[i] > x[i+1]) 
      { 
       temp = x[i]; 
       x[i] = x[i+1]; 
       x[i+1] = temp; 
       swapdone = true; 
      } 
     } 
    } 
} 

void display (double x[], int length) 
{ 
    int i; 
    for (i=0; i < length; i++) 
    { 
     cout << x[i] << " "; 
    } 
    cout << endl; 
} 

는, 결과는 다음과 같습니다 당신이 정수가 될하는 데에 할당 일을하지 않으려는 경우

Enter data item count <1-20> 
5 
Enter score 
30.41 
Enter score 
63.25 
Enter score 
62.47 
Enter score 
40.25 
Enter score 
310.41 
Original Data: 
30.41 63.25 62.47 40.25 310.41 
Sorted Data 
30.41 40.25 62 63 310.41 

답변

4

tempdouble 아닌 int해야한다.

+0

와우 .. 감사합니다. 나는 바보 야. – user1401727

0

이 시도 :

double tmp; 
std::cout << ios_base::setpercision(3) << tmp; 
0

확인

int i, temp; 

임시을 두 번해야합니다!

1

당신이 사용하는 경우 "i"가 전용 카운터로 당신이 어떤 문제를 저장합니다 같은

for (int i=0;i<length;i++) 

로 루프의 내부를 선언 할 수 있습니다. 어쨌든,

변경 int i, temp;

int i; 
double temp; 

에 두 번이 소수점 숫자를 저장할 수있는 의미, 정수는 정수를 의미한다. 버블 정렬을하기 위해 스와핑 할 때, 당신의 double을 정수형으로 변환합니다. 컴파일러에서 형식 변환 오류가 발생하지만 컴파일해야합니다.