2015-10-18 23 views
1

初学C++的学生在这里,第一个编程类。我正试图编写一个程序来检查你是否可以被七整除。我的意思是从0到10亿的任何数字都可以说。我还需要让程序循环,并要求用户在输入无效输入时输入一个不能被7整除的数字。C++程序测试可分/多个由7

例子:

等等

这甚至不是一个数字。

这7

你好

不是整除7

这不是整除这甚至不是一个数字。

这由7

程序结束的整除。

这是我到目前为止。我无法弄清楚如何在输入正确的数字时停止并在所有其他情况下继续。任何帮助是极大的赞赏!!

编辑

好吧,我采取了不同的路线,并创建了一个嵌套循环。我得到了最多的工作。现在,当数字不能被7整除时,它将继续循环,直到我输入一个值。

现在唯一的问题是,当我输入“blah”时,即使它在可分割之前检查变量,它将会进入无限循环,如下面的屏幕截图所示。任何帮助非常感谢让这部分工作。

https://www.dropbox.com/s/y6tx02nwmq1pdvr/scenario4_results.jpg?dl=0

EDIT#2

Okie道基。我正在接近一点。使用我所知道的关于cin.clear()的一小部分内容以及我可以研究的内容并将它们放在一起,我得到了无限循环停止,但现在编程不会识别在循环触发后输入的数字在链接截图。一如既往,非常感谢帮助解决这个问题。

https://www.dropbox.com/s/2zueqy5foijka9s/scenario5_results.jpg?dl=0

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 

    int num = 0, sum = 0; 

    unsigned Divisible = (num % 7 == 0); 

     do { 

      cout << "Enter an integer: "; 
      cin >> num; 
      cout << endl; 

      while (Divisible){ 

      if (cin.peek() == '\n' && !cin.fail()) break; 
       cout << "That's not a number, try again: "; 
       cin.clear(); 
       cin.ignore(INT_MAX, '\n'); 

     } 

     while 
      (Divisible) { 
      if (char(num % 7 != 0)) 
       cout << "It's not divisible by 7, try again." << endl; 
       break; 
     } 

     while 
      (Divisible) { 
      if (num % 7 == 0) 
      cout << "It's divisible by 7." << endl; 
      break; 
     } 


    } 

    while (num % 7 != 0 || !cin); 



} 
+0

使用break语句。 – ergonaut

+0

你正在阅读的方式的问题是cin将采取等等,并给0(这是可以整除7 ..)。你需要区分无效输入和0 – amdixon

+0

应该是可分的== 0,而不是1.其次,你需要在处理数字之前检查错误的输入。第三,你可以不做。您也可以使用%来获取整数之间的余数。 – Ant

回答

0

在帮助和指导下完成更多和最终代码一些C++网络教师。谢谢大家的回复和帮助!非常感谢!

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 

    int num = 0, sum = 0; 

    while(true) { 

     cout << "Enter an integer: "; 
     cin >> num; 
     cout << endl;   

     if (cin.fail()) {     
       cout << "That's not a number, try again: "; 
       cin.clear(); 
       cin.ignore(INT_MAX, '\n'); 
       continue; 
       }   
     bool isDivisible = num%7 == 0; 

     if (!isDivisible) 
      cout << "It's not divisible by 7, try again." << endl; 
     else 
      break; 
    } 

    cout << "It's divisible by 7." << endl;  
} 
3

你想要更多的东西一样:

while (true) { 
    cout << "Enter a positive integer: "; 
    cin >> num; 
    bool divisible = !(num % 7); 
    if (divisible) { 
     cout << "It's divisible by 7" << endl; 
     break; 
    } 
    else { 
     cout << "It's not divisible by 7, try again: " << endl; 
    } 
} 
+0

不覆盖用户输入“blah”(将它视为可被7整除) – amdixon

+0

谢谢。我决定走一条不同的路线并更新原文。大部分工作都可以工作,但仍然存在“无效”问题,因为它会使其陷入无限循环。任何帮助,非常感谢。 – st4evr

0

虽然可能有几种性病的功能,您可以使用,在这里它可能更容易推出自己的:

int 
getnum(void) 
{ 
    char chr; 
    int num; 

    while (1) { 
     cout << "Enter a positive integer: "; 

     num = 0; 

     while (1) { 
      cin >> chr; 
      if (chr == '\n') 
       break; 

      if (num < 0) 
       continue; 

      if (chr < '0') 
       num = -1; 
       continue; 
      } 

      if (chr > '9') { 
       num = -1; 
       continue; 
      } 

      num *= 10; 
      num += chr - '0'; 
     } 

     cout << endl; 

     if (num >= 0) 
      break; 

     cout << "Not a valid number\n"; 
    } 

    return num; 
}