2016-04-06 2 views
-3

Я только начал изучать C++, и я хочу спросить, почему вывод моего простого кода неверен.C++ about looping, неправильный вывод

Что я хочу:

пользовательского ввода N -> выхода = "N числа, по модулю 2 = 0, но не те 3 = 0"

Что я получил: вход

пользователя N - > выход = "число, по модулю 2, но не mod3 = 0, с диапазоном до п"

Вот не мой код:

#include <iostream> 
#include <conio.h> 

int main() 
{ 
    int i,n; 

    std::cout << "input n" << std::endl; 
    std::cin >> n; 
    std::cout << "N Number that mod2=0 but mod3!=0" << std::endl; 

    for (i = 1; i <= n; ++i) 
    { 
     if (i % 2 == 0 && i % 3 != 0) 
     { 
      std::cout << i < " "; 
     } 
    } 

    getch(); 
} 
+1

Вы хотите просто сделать проверку только для номера n? Я правильно не понял ваш вопрос. – Vasanth

+3

Ваша программа не может создать желаемый результат. Он также не может генерировать наблюдаемый выход. Просто потому, что строка в исходном тексте отличается от любой из них. Пожалуйста, дважды проверьте, что запущенная вами программа на самом деле является компиляцией из источника, который вы опубликовали. Затем постарайтесь сформулировать свой вопрос лучше; прямо сейчас неясно, чего вы хотите. – DevSolar

+0

Итак, вы хотите отобразить все числа между 1-> N, которые равны i% 2 = 0, но не i% 3 = 0? –

ответ

1

Если я правильно вас понимаю, вы хотите, чтобы пользователь вводил количество чисел, которые соответствуют вашему состоянию. Для этого у вас должен быть счетчик:

#include <iostream> 
#include <conio.h> 
#include <cmath> 

using namespace std; 

int main() 
{ 
    int n; 

    cout << "input n" << endl; 
    cin >> n; 
    cout << n << " numbers for that holds that mod2 = 0 but mod3 != 0" << endl; 

    int counter = 0; 
    for (int i = 1; counter < n; ++i) 
    { 
     if (i % 2 == 0 && i % 3 != 0) 
     { 
      cout << i << " "; 
      ++counter; 
     } 
    } 
    getch(); 
} 

Я также изменил некоторые другие детали.

+0

omg большое спасибо. – Atika

1

Разные вещи, чтобы принять на ум:

  • Лучше включать от <iostream> изо <iostream.h> (добавим ссылку почему)
  • cout, cin и endl находятся в std пространстве имен, так как использование правильное пространство имен или добавить std::
  • Тип возврата main() должен быть int. Если нет оператора возврата, он будет неявным образом.
    • Там разница между operator< и operator<<

Код:

#include <iostream> 

    int main() 
    { 
     int i,n; 

     std::cout<<"input n"<<std::endl; 
     std::cin>>n; 
     std::cout<<"N Number that mod2=0 but mod3!=0"<<std::endl; 

     for (i=1;i<=n;i++) 
      if (i%2==0 && i%3!=0) 
       std::cout << i << std::endl; 

     return 0; 
    } 
+0

'main' не нужно возвращать' int', только тип возвращаемого значения должен быть 'int' – IceFire

+0

C++ Standard, глава 3.6.1, пункт 5: Оператор возврата в главном режиме имеет функцию выхода из основной функции (уничтожение любых объектов с автоматическим временем хранения) и вызов exit с возвращаемым значением в качестве аргумента. Если элемент управления достигает конца main без столкновения с оператором return, это эффект выполнения return 0; Таким образом, он будет возвращать int неявно;). – Zafi

+0

Точно. Ваша третья маркерная точка вместе с 'return 0;' причастным мне, тем не менее, что 'return 0;' является необходимым утверждением, которого нет. Я просто хотел уточнить это с моим комментарием – IceFire

0

Не уверен, у меня вопрос полностью, но наиболее очевидным виновником является опечатка в строке :

cout<<i<" "; 

Заменить «<» с оператором вывода потока, то есть «< <».

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