我正在编写一个从cin
逐行读取的函数,并在看到;
个字符时返回。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
int read_cmd(char *cmd)
{
cout << "Please enter a string: \n";
cmd[0]='\0';
while(1){
char currentLine[10000];
currentLine[0]='\0';
cin.getline(currentLine,10000);
if (strcmp(currentLine,";")==0){
break;
}
strcat(cmd, "\n");
strcat(cmd, currentLine);
}
return 0;
}
int main(){
char cmd[1000];
while (1){
read_cmd(cmd);
cout<< cmd << endl;
}
}
然后,我使用通过管道从另一个文件提供的文本对其进行测试。 ./read_cmd&lt; test_file里面
test_file的内容:
line 1
line 2
;
这输出结果很好,但它最后给了我一个分段错误。 cin
是否有办法检查它是否会遇到EOF并终止?
答案 0 :(得分:0)
我强烈建议使用string
对象来做这样的事情,这样你就不会浪费空间,也不会确保你有足够的空间。你也可以不用循环来做。
string currentLine;
getline(cin, currentLine, ';');
现在,如果你需要得到包含分号的最后一行,则需要一个循环,但你仍然可以轻松地完成它。
string currentLine;
while(getline(cin, currentLine)){
if(currentLine.find(";") != string::npos){
break;
}
}
使用字符串传递内容。总是有.clear()
方法,任何字符串都可以轻松清空。
答案 1 :(得分:0)
要检测EOF,您应该使用以下内容:
while (cin.good() && !cin.eof())
{
// Read the file
}
请参阅documentation for cin,特别是good()
(用于错误检查)和eof()
成员函数。
特别是this example可能会有所帮助。