写入文件时出错
问题描述:
我有一个简单的程序。它需要stdin
并输出用户刚刚输入的内容。还有就是我用具有几个问题是代码:写入文件时出错
-
出于某种原因,在我输入的中间,它停止服用输入和退出程序。 [输入为黑体,下面的输出不是]
[---] ./ a.out的
哈珀
哈珀
奥巴马
奥巴马
唐纳德·特朗普
唐纳德·特朗普
本·卡森
-
如果我把上面成一个名为FILE1.TXT和写入
./a.out < file1.txt
,它会起作用,但如果我把上面的输入放到一个带有“.in”扩展名的文件中并且做同样的事情,它就不会。
- 如果我在输入中更改naems,它会改变接受的输入行数。
如果有人告诉我发生了什么,我会很感激。
感谢
我的代码是:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main() {
bool empt = false;
int num_ppl = 0;
int num_spoilt = 0;
ofstream names2 ("names2.txt");
if (names2.is_open()) {
int a = 0;
while(1) {
string line;
getline(cin, line);
if (line.length() == 0) {
empt = true;
break;
}
if (((line[a] >= 'A') && (line[a] <= 'Z')) ||
((line[a] >= 'a') && (line[a] <= 'z'))) {
cout << line << endl;
names2 << line;
names2 << endl;
num_ppl++;
} else {
break;
}
a++;
}
names2.close();
}
}
答
这是你拥有这封信确实是一个失败的信件检查。
让我们把它从开始:
- 对于输入
Stephen Harper
你检查line[0]
是一个字母,它是。 - 对于输入
Barack Obama
,你检查line[1]
是一封信,它是。 - 对于输入
Donald Trump
您检查line[2]
是一封信,它是。 - 对于输入
Ben Carson
你检查line[3]
是一个字母,这是不,所以你跳出循环。
如果你想确保所有的输入是字母(或空格),你需要在一个单独的循环中做到这一点。或使用standard algorithm function像std::all_of
:
if (std::all_of(std::begin(line), std::end(line),
[](const char& ch) {
return std::isalpha(ch) || std::isspace(ch);
}))
{
...
}
else
break;
+0
好的。谢谢你。我不相信我没有看到。但我仍然不确定我在帖子中提到的第二个问题。为什么会发生? –
顺便说一句,你可以很容易地发现的问题,如果你只知道如何使用调试器。如果在调试器中一行一行地逐行浏览代码,同时观察变量和它们的值,则很容易很快发现问题。 –