2013-12-03 5 views
0

До сих пор здесь мой кодВозникли проблемы с массивами:/

int main() 
{ 
    srand(time(0)); 
    int inputnum,occurrences; 
    occurrences = 0; 
    cout<<"Enter a number to check the occurences"<<endl; 
    cin>>inputnum; 
    int arrayofnum[10] = {(rand()%201),(rand()%201),(rand()%201),(rand()%201),(rand()%201),(rand()%201),(rand()%201),(rand()%201),(rand()%201),(rand()%201)} ; 
    cout<<arrayofnum[0]<<","<<arrayofnum[1]<<","<<arrayofnum[2]<<","<<arrayofnum[3]<<","<<arrayofnum[4]<<","<<arrayofnum[5]<<","<<arrayofnum[6]<<","<<arrayofnum[7]<<","<<arrayofnum[8]<<","<<arrayofnum[9]<<endl; 
    for(int i=1;i<=10;i++) 
    { 
     if(inputnum == arrayofnum[i]) 
      occurrences++; 
    } 

    cout<<"The number of occurrences of "<<inputnum<<"in the random list is "<<occurrences<<" times"<<endl; 

    system("pause"); 
    return 0; 
} 

Моя цель состоит в том, чтобы проверить, сколько раз число вводится показано в массиве Однако, если заявление, кажется, дает мне неприятности может кто-нибудь поможет?

+0

Кроме того, вы используете неправильную индексацию массива (массив начинается с 0, а не с 1, а последним - 9), что конкретно представляет собой ваша проблема? Что вы ввели? Какой у вас результат? Какой результат вы ожидаете? – keltar

+0

Возможно, вы захотите более подробно объяснить, что означает «проблема». Конкретное сообщение об ошибке здесь может помочь вам избежать слишком большого уменьшения. –

+0

Вы использовали отладчик, чтобы узнать, как выполняется ваш код и каковы значения переменных в каждой строке вашего кода? –

ответ

1

Похоже, вы обращаетесь за концом массива:

if (inputnum == arrayofnum[i]) 

Ваш для цикла позволяет i принимать значение от 10 до прекращения, так и в последней итерации вы бы доступ arrayofnum[10] , Последний элемент массива - arrayofnum[9].

Помните, что массивы в C++ с нуля, так что вам просто нужно настроить ваш для петли, как это:

for (int i = 0; i < 10; i++) { 
    /* stuff */ 
} 
0

Изменить этот

for(int i=1;i<=10;i++) 

к этому,

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

, чтобы узнать, что происходит

0

заменить for(int i=1;i<=10;i++) на

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

ваш массив начинается с индекса 0

0

От того, как у вас есть cout'ed в arrayofnum, я предполагаю, что вы знаете работу массивов и его границы, т.е. массивы начинаются с index 0 и заканчиваются на maxCount-1. Итак, теперь вы должны взглянуть на петлю for, и вам хорошо идти.

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

ваш цикл неверен она должна быть for(int i=0;i<10;i++) как размер массива 10, так что вы должны повторять от 0 до 9.

0

Я думаю, что это можно сделать очень легко. Вот как бы я это сделал:

#include<cstdio> 
#include<cstdlib> 
#include<iostream> 

using namespace std ; 

int main() { 
    int i , user_input , lim , mod , cn ; 
    lim = 10 ; 
    mod = 201 ; 
    cn = 0 ; 
    int arr[ lim ] ; 
    for(i = 0 ; i < lim ; i++) { 
     arr[ i ] = rand() % mod ; 
    } 
    cout << "Enter a number to check the occurences\n" ; 
    cin >> user_input ; 
    for(i = 0 ; i < lim ; i++) { 
     if(i != 0) { 
      cout << "," ; 
     } 
     cout << arr[ i ] ; 
     if(arr[ i ] == user_input) { 
      cn++ ; 
     } 
    } 
    cout << "\n" ; 
    cout << "The number of occurrences of " << user_input << " in the random list is "  << cn << " times" << "\n" ; 
    return 0 ; 
} 

Также вы получаете доступ к позиции в массиве, который не существует. Допустимыми индексами вашего массива являются [0,10].

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