2016-07-24 2 views
-3

Я пытаюсь убедиться, что пользователь вводит значение в диапазоне от 1 до 20, но пришла эта ошибка компиляции, когда я пытался скомпилировать мой код:ошибка компилятора при сравнении указателя и целого числа

error: ISO C++ forbids comparison between pointer and integer

Вот мой код:

#include <iostream> 

using namespace std; 

const int SIZE=20; 

void bubbleSort(int numbers[], int SIZE); 


int main() 
{ 
    int numbers[SIZE]= {26, 45, 56, 12, 78, 74, 39, 22, 5, 90, 87, 32, 28, 11, 93, 62, 79, 53, 22, 51}; 
    int value=0; 
    bool found; 

    cout << "Today we are going to be searching for values." << endl; 
    cout << "These are the values you have to choose from" << endl; 

    for (int i=0; i<SIZE; i++) 
     cout << numbers[i]<<"; "; 


    cout << "What value would you like to search for?" << endl; 

    cin >> value; 

    do 
    { 
     cout << "Make sure to enter a value that's in the list." << endl; 
     cin >> value; 
     found=false; 
     for (int i=0; i<SIZE; i++) 
     { 
      if (value==numbers[i]) 
      { 
       found=true; 
       break; 
      } 
     } 
     if (!found) 
      cout << "Enter a valid value !" << endl; 
    } 
    while (!found); 

    bubbleSort(numbers, SIZE); 



    return 0; 
} 

void bubbleSort (int numbers[], int SIZE) 
{ 
    int maxElement=0; 
    int index=0; 


    cout << "Original order:" << endl; 
    cout << numbers << endl; 


    for(maxElement=SIZE-1; maxElement>=0; maxElement--) 
    { 
     for(index=0; index<=maxElement-1; index++) 
     { 
      if(numbers[index]>numbers[index+1]) 
      { 
       swap(numbers[index], numbers[index+1]); 
      } 
     } 
    } 

} 

void swap(int &a, int &b) 
{ 
    int temp; 
    temp=a; 
    a=b; 
    b=temp; 

    cout << "Bubble Sorted:" << a << b << endl; 
} 
+1

У вас есть вопросы? – juanchopanza

+2

'while (value! = Numbers)' бессмысленна ерунда. Что вы пытаетесь с этим сделать? Кроме того, 'cout << numbers' не делает то, что вы, кажется, думаете, что он делает (он не печатает содержимое массива' numbers'). –

+1

Можете ли вы объяснить, как вы пришли к выводу, что сравнение 'value! = Numbers' будет проверять, находится ли' value' от 1 до 20? –

ответ

1

Если вы хотите, чтобы проверить, что вход между 1 и 20, то это проще написать:

while(value<1 || value>20) 
{ 
    cout << "The value chosen must be between 1 and 20." << endl; 
    cin>> value; 
} 

Если вы хотите проверить это значение в списке из 20 целых значений, которые вы помещаете в массив, вы не можете просто сравнить одно целое с массивом. Вы должны искать в массиве, например, с find():

while(find(numbers, numbers+SIZE, value)==numbers+SIZE) 
{ 
    cout << "The value chosen must be between in the list of authorized values" << endl; 
    cin>> value; 
} 

Кстати, ваш cout<<numbers не будет работать, как вы ожидаете! Либо сделать цикл для перебора цифр и отображать их все или попробовать:

copy (numbers, numbers+SIZE, ostream_interator<int>(cout,"; ")); 

Редактировать: Альтернативы без алгоритмов

Если вы не можете использовать copy() или find(), у вас есть для работы с петлями для:

// for displaying 
for (int i=0; i<SIZE; i++) 
    cout << numbers[i]<<"; "; 
cout <<endl; 

И для нахождения, либо вы создаете функцию для него, или вы должны переработать структуру цикла:

... 
bool found; 
do { 
     cin >> value; 
     found=false; 
     for (int i=0; i<SIZE; i++) { 
      if (value==numbers[i]) { 
       found=true; 
       break; 
      } 
     } 
     if (!found) 
      cout << "Enter a valid value !" << endl; 
} while (!found); 
... 
+0

У вас есть совет, чтобы проверить, находится ли значение в 20 списке целых чисел без поиска? Мы не используем это в моем классе, но ха-ха. Было бы сложно объяснить. – FBHSIE

+0

@Christphe забыл пометить вас – FBHSIE

+0

@FBHSIE Я отредактировал свой ответ – Christophe

Смежные вопросы