2014-04-26 5 views
0

Я принимаю онлайн-курс.как исправить этот код

вопрос домашнее задание:

Используйте функцию рэнд(), чтобы напечатать первые 50 чисел от 1 до 100. Попытка поставить каждые 5 случайное число только в одной строке. Используйте функцию setw() для выравнивания.

В настоящее время у меня есть следующее. Я знаю, что это бесконечный цикл и ошибка, о которой я думаю, проблема в моем заявлении if.

#include <iostream> 
#include <time.h> 
#include <iomanip> 

using namespace std; 

int main() { 
    int random_number; 

    srand(time(NULL)); 

    random_number = rand() % 100 + 1; 
    cout << "50 random numbers are:" << endl; 
    while (random_number < 100, rand() % 100 + 1) 
    { 
     cout << random_number << setw(5) << endl; 
     if (random_number == 100) 
      break; 
    } 
    system("pause"); 
} 
+0

Вопрос не ясен для меня. Вы пытаетесь напечатать 50 случайных чисел в диапазоне '[1, 100]'? Вы в порядке с повторением (то есть, вы хотите, чтобы номера были уникальными)? –

+0

Назначение состоит в том, чтобы напечатать 50 номеров, поэтому начните с этого, создайте цикл цикла, который каждый раз выполняет итерацию в 50 раз, а затем выполняет форматирование строк соответствующим образом. –

+0

Также обратите внимание, что: 'random_number <100, rand()% 100 + 1'. Оператор запятой выполнит 'random_number <100', отбросит его возвращаемое значение, выполнит' rand()% 100 + 1' и вернет его возвращаемое значение. Это означает, что выражение эквивалентно 'rand()% 100 + 1'. –

ответ

1

Ваш while неисправна, см предыдущий комментарий. Это должно сработать.

#include <iostream> 
#include <time.h> 
#include <iomanip> 

using namespace std; 

int main() { 
    int random_number; 

    srand(time(NULL)); 

    cout << "50 random numbers are:" << endl; 
    for(int i=0; i<50; i++) 
    { 
     random_number = rand() % 100 + 1; 
     cout << setw(5) << random_number << endl; 
    } 
    system("pause"); 
} 

или, если вы хотите использовать while,

#include <iostream> 
#include <time.h> 
#include <iomanip> 

using namespace std; 

int main() { 
    int random_number; 

    srand(time(NULL)); 

    cout << "50 random numbers are:" << endl; 
    int counter=0; 
    int random_number; 
    while(counter<50) 
    { 
     counter++; 
     random_number = rand() % 100 + 1; 
     cout << setw(5) << random_number << endl; 
    } 
    system("pause"); 
} 

но просто использовать for, поскольку это более компактный.

+0

Это именно то, что мне нужно в терминах, которые я могу понять на этом уровне. Благодаря!! – nickwelsh1989

+0

@ nickwelsh1989 Тогда, возможно, вы должны принять ответ vsoftco. Это, демонстрируя признательность за концепцию stackexchange, побуждает других помогать друг другу. – Varaquilex

0

Поскольку это домашнее задание, я не могу отправить прямой ответ. Тем не менее, это должно считаться хорошей демонстрацией современного C++:

Посмотри Live On Coliru

#include <boost/spirit/include/karma.hpp> 
#include <boost/iterator/function_input_iterator.hpp> 
#include <boost/random.hpp> 

boost::random::variate_generator<boost::mt19937, boost::uniform_int<int> > rdngen(
     boost::mt19937(), boost::uniform_int<int>(1, 1000)); 

int main() { 
    auto f = boost::make_function_input_iterator(rdngen, 0), 
     l = boost::make_function_input_iterator(rdngen, 100); 

    auto range = boost::make_iterator_range(f, l); 

    using namespace boost::spirit::karma; 
    std::cout << format_delimited(columns(5) [ right_align(10) [ *auto_ ] ], "\t", range) << "\n"; 

} 
+0

-1 только потому, что это * бит * продвинутый для OP –

+0

@OutlawLemur Я не вижу, как это навредит ему: | – sehe

+0

Это его первая неделя программирования. Я работаю на C++ минимально в течение нескольких месяцев и имею многолетнюю практику, но это все еще довольно продвинуто для меня. Это отличный ответ, но не подходит в контексте –

0

Я думаю, что для того, что вы размещая, что вы хотите напечатать 50 случайных чисел от 1 до 100 , не так ли? Если это так, я заметил, что ошибка заключается в условии останова цикла while. Вам нужна переменная для подсчета отображаемых номеров, и вы должны проверить, достигла ли эта переменная 50 отображаемых номеров.

srand(time(NULL)); 

random_number = rand() % 100 + 1; 
cout << "50 random numbers are:" << endl; 
for (int i = 0;i<50;++i) 
{ 
    random_number = rand() % 100 + 1 
    cout << random_number << setw(5) << endl; 
// if (random_number == 100) 
//  break; 
} 
system("pause"); 

В способе, которым вы закодировали условие останова, это возможно, что никогда не уходит. Необходимо, чтобы вы получили 100 для выхода из цикла

Я надеюсь, что этот пост был полезен для вас Спасибо.

1

Я понимаю, что многие из вышеперечисленных кодов хороши для op. Поскольку, как мы видим, op является новым для кодирования, здесь моя упрощенная попытка.

#include <iostream> 
#include <ctime> 
#include <cstdlib> 
#include <iomanip> 
using namespace std; 
int main() { 
    int random_number, count=0; //Using count as a counter. 
    srand(time(NULL)); 

    cout << "50 random numbers are:" << endl; 
    //checking two conditions. count and random number generated is less than 100 
    while (count <50) 
    { 
     if((random_number = rand() % 100 + 1) > 100) continue; 
     count++; 
     cout<< setw(5) << random_number ; 
     //Try to put every 5 random number in one line only. 
     if (count %5==0) cout<<endl; 
    } 

} 

Проблема с кодом:

  • Вы генерировали случайное число только один раз, так как это было вне времени цикла.
  • Нет правильных критериев остановки цикла while. Предоставление бесконечного цикла.
  • Ваше решение не было задано в вопросе.

Спасибо.

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