gpt4 book ai didi

c++ - 程序在 Ideone 上正确执行,但在 Xcode 中不正确

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:24 25 4
gpt4 key购买 nike

我最近才开始重新学习 C++,因为我在高中业余时间学习了它(使用 C++ Primer,第 5 版)。在进行基本练习时,我注意到以下程序无法在 Xcode 中正确执行,但会在 Ideone 中正确执行:http://ideone.com/6BEqPN

#include <iostream>

int main() {
// currVal is the number we're counting; we'll read new values into val
int currVal = 0, val = 0;

// read first number and ensure that we have data to process
if (std::cin >> currVal) {
int cnt = 1;
while (std::cin >> val) {
if (val == currVal)
++cnt;
else {
std::cout << currVal << " occurs " << cnt << " times." << std::endl;
currVal = val;
cnt = 1;
}
}
std::cout << currVal << " occurs " << cnt << " times." << std::endl;
}

return 0;
}

在 XCode 中,程序没有完成。它在 while 循环体的最后一次执行时停止。在调试控制台中,我看到有一个信号 SIGSTOP。 Screenshot

这是我第一次将 Xcode 用于任何类型的 IDE。我怀疑这可能与我的build设置有关?我已经为 GNU++11 配置它并使用 libstdc++。

对于为什么此代码可以在 Ideone 上运行,但不能在 Xcode 上运行的任何见解,我将不胜感激。另外,我想知道首选哪些 IDE,以及 Xcode 是否适合学习 C++11。谢谢!

最佳答案

你的 cin 永远不会停止。您的 while 循环的条件是 std::cin >> val,因此循环将一直运行直到输入非数字的内容。在您的输入行 (42 42 42 42 42 55 55 62 100 100 100) 被处理后,cin 处于失败状态,它只是等待新的输入。如果您输入任何非数字的内容,您的循环将正确完成(例如 42 42 42 42 42 55 55 62 100 100 100 x)。

如果你想读取单行输入,你应该使用std::getlinestringstream:

#include <iostream>
#include <sstream>

int main() {
// currVal is the number we're counting; we'll read new values into val
int currVal = 0, val = 0;

string str;
//read the string
std::getline(std::cin, str);
//load it to the stream
std::stringstream ss(str);

//now we're working with the stream that contains user input
if (ss >> currVal) {
int cnt = 1;
while (ss >> val) {
if (val == currVal)
++cnt;
else {
std::cout << currVal << " occurs " << cnt << " times." << std::endl;
currVal = val;
cnt = 1;
}
}
std::cout << currVal << " occurs " << cnt << " times." << std::endl;
}

return 0;
}

关于c++ - 程序在 Ideone 上正确执行,但在 Xcode 中不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com