2017-08-09 35 views
-5

while循环“写一个程序,它由一个while循环是(大约每次循环)在两个整数读取,然后打印它们 退出程序时终止。‘|’输入“。如何停止在C++

我尝试

#include <iostream> 
#include <cstdlib> 
using namespace std; 



int main(){ 

    int firstnumber; 
    int secondnumber; 
    int stopnumber; 


    while(stopnumber!='|'){ 

     cout <<"Please enter an integer, followed by another integer: \n"; 
     cin >> firstnumber >> secondnumber; 
     cout <<"\n" << firstnumber <<" "<< secondnumber<< " \n"; 

    } 

return 0; 
} 

程序需要2号,并将它们打印,但是当我输入 '|'它进入无限循环。当我输入'|'时如何停止程序

感谢

+1

你永远不会改变'stopnumber'。你期望什么? – Quentin

+1

有必要将'stopnumber'初始化为'|''以外的内容,以防止在第一次循环迭代中出现未定义的行为。然后在循环内指定'stopnumber ='|''将在执行到达}时停止循环。你的代码没有做。 – Peter

+0

我甚至需要stopnumber吗?因为别人建议我可以在while循环中使用firstnumber和secondnumber作为我的条件 –

回答

0

你的循环测试stopnumber这是从来没有设置。如果你将stopnumber设置为firstnumbersecondnumber那么也许你可以让你的逻辑工作,但是现在缺少一个步骤。

0

这取决于你是否需要直接退出您收到后的“|”字符,或者是否你不介意先退出前通过的循环的其余部分运行......

个人而言,我会想接收后直接退出“|”所以将遵循....

int a,b; 

while(){ 
    read your values a,b in 
    if (a='|' || b='|'){exit()}; 
    print your values 
} 
0

确定的基本思路,我想我已经找到了我的答案

我试图把我的CIN while循环这样

int firstnumber; 
int secondnumber; 

    while (cin >> firstnumber >> secondnumber) 

而且有效!谢谢大家对你的帮助

+0

任何非数字字符都会打破循环,不仅是''''。 – ZDF

+0

你说得对。回到绘图板。 –

+0

您将首先决定如何处理无效输入。您有两种选择:1.显示错误消息并退出程序(更简单)。 2.忽略无效输入(更难)。 – ZDF

1

这是你的循环应该怎么样子:

  1. 读取一个字符(std::cin::get)。
  2. 如果成功并且您的角色是停止符号,请打破循环。
  3. 如果你的性格是不是一个数字(::isdigit),继续循环。
  4. 如果你的角色是一个数字,把它放回去(std::cin::putback)。
  5. 读取两个整数。
  6. 如果成功的话,显示它们,如果没有,清除流(std::cin::clear)。

你将不得不耐心地试图了解getputback & isdigit在做什么。

[编辑] Run it

#include <iostream> 
#include <cctype> 

int main() 
{ 
    char c; 
    while (std::cin.get(c) && c != '|') 
    { 
    if (!std::isdigit(c)) 
     continue; 

    std::cin.putback(c); 

    int i, j; 
    if (std::cin >> i >> j) 
     std::cout << i << ' ' << j << std::endl; 
    else 
     std::cin.clear(); 
    } 

    return 0; 
} 
+0

流支持'.peek()'成员,这可以帮助避免读取/检查/放回周期。 –

+0

@JerryCoffin角色必须从流中移除。 – ZDF

+0

最终,也许 - 但如果它是一个数字,那么您不想立即删除它。在这种情况下,显而易见的意图是,如果它是'|',程序将立即退出,在这种情况下,将它从流中删除并不重要。 –

0

的std :: Stoi旅馆(的std :: string) - 返回的std ::诠释字符串

#include <iostream> 
#include <string> 

bool isNumber(std::string &str) { 
    for (auto i : str) { 
     if (i < '0' || i > '9') return false; 
    return true; 
} 

int main() { 
    int a, b; 
    std::string s; 

    while (true) { 
     std::cin >> s; 
     if (s == "|" || !isNumber(s)) break; 
     a = std::stoi(s); 

     std::cin >> s; 
     if (s == "|" || !isNumber(s)) break; 
     b = std::stoi(s); 

     std::cout << a << " " << b << std::endl; 
    } 

    return 0; 
} 
+0

如果你输入'abc 123',该怎么办? – ZDF

+0

@ZDF你为什么想输入abc 123? Ross_Barkley要求使应用程序读取2个整数,或在'|'结束时结束写入。 – bpieszko

+0

用户键入他/她喜欢的任何内容。如果你输入“||”会发生什么? – ZDF