2016-01-08 287 views
0

所以我只是做一个程序,接受输入并遇到错误;我尝试过调试,但是当我使用std :: cout时,没有消息让我调试它。控制台没有响应?

int main() 
{ 
    try { 
     std::ifstream text_file; 
     ics::safe_open(text_file,"Enter file name to analyze","C:\\Users\\Xari\\Downloads\\program1\\graph1.txt"); 
     Graph graph = read_graph(text_file); 

     print_graph(graph); 

     while (true) { 
      std::string input; 
      std::cout << "Enter the name of a starting node (enter quit to quit) D: "; 
      std::cin >> input; 
      std::cout << "INVISIBLE DEBUGGER MESSAGE" << std::endl; 
      if (input != "quit") 
       std::cout << "Reachable from node name " << input << " = " << reachable(graph, input) << std::endl; 
      else 
       break; 
     } 

    } catch (ics::IcsError& e) { 
     std::cout << e.what() << std::endl; 
    } 

    return 0; 
} 

问题是如果我输入“a”,“b”输出很好。如果我输入c或更高,我不会收到消息回复。即使是更奇怪的是,如果我在我的意见之后说得对,我仍然会得到同样的问题,这是没有意义的。

+0

错误最有可能在可达函数中。如果你使用调试器,你可以看到。 – Joni

+0

您的'Graph'可能已损坏,其遍历功能有缺陷,或者'reachable'算法有缺陷。我们无法从您发布的代码中知道。你应该发布一个最小但完整的,可编译的程序来重现这个问题:在这种情况下,如果在print_graph调用之后简单地调用std :: cout << reachable(graph,“c”),你可以完全抛弃输入的东西。 ;'挂了。 –

+0

也许尝试使用'std :: getline(std :: cin,input);'而不是'std :: cin >> input;''getline()'会等到用户输入'ENTER',然后返回整个行输入,而当用户键入一个空白字符时,'std :: cin >>'将停止阅读。 –

回答

1

检查是否可达(图形,输入)不会遇到无限循环

+0

哦所以std :: cout不会列出,即使它在可达之前被调用? –

+0

@ Xari:你说你没看到'std :: cout <<“INVISIBLE DEBUGGER MESSAGE”<< std :: endl;'output?但是你看到'std :: cout <<“输入一个起始节点的名字(输入quit退出)D:”;'提示符并输入一些内容,然后按ENTER键? –

+0

是的。我看到“输入名称....”。当我进入它只是移动到一个新的行,并没有做任何事情。只有当我输入“a”或“b”时,它才会通过可达性。否则,前者发生。 –