如何读取cpp中的多行?

时间:2013-12-08 11:07:22

标签: c++ input

我试图一次读两行(例如:这是一行)但由于某种原因,我无法同时读取这两行...... :(请帮忙...... < / p>

int main() {
freopen("input.txt", "r", stdin);
char c, one[100], two[100];
int i = 0, t;

cin>>t;
while(t--) {

    while((c = getchar()) != '\n') {
        one[i++] = c;
    }
    one[i] = '\0';

    i = 0;
    while((c = getchar()) != '\n') {
        two[i++] = c;
    }
    two[i] = '\0';
    cout<<one<<endl;
    cout<<two<<endl;
}

}

输入:这是第一行        这是第二行 输出:这是第一行(每次迭代)..请帮助..:|

2 个答案:

答案 0 :(得分:1)

您可以使用std :: getline:

int main(){
 char one[100], two[100];
 std::ifstream ifs;
 ifs.open("input.txt", std::ifstream::in);
 ifs.getline(one, 100);
 ifs.getline(two, 100);
 std::cout << one << std::endl;
 std::cout << two << std::endl;
 return 0;
}

答案 1 :(得分:0)

我与输入无关,但在阅读每一行之前,您需要重置i。从它的外观来看,你只是在第一行中间的某个地方附加。下面是读取一行的样子(显然,如果你读取的行数多于执行相同操作所需的行数,即调用函数执行相同的逻辑):

{
    size_t i(0);
    for (int tc; i < sizeof(one) && (tc = getchar()) != EOF && tc != '\n'; ++i) {
        one[i] = tc;
    }
    one[i] = 0;
}

我还用两个额外的必要条件来增强条件,一个用于避免缓冲区溢出,另一个用于处理已到达末尾的流。当然,我不会做这样的事情,而是会使用

std::string one;
if (std::getline(std::cin, one) && std::getline(std::cin, two)) {
    std::cout << "one='" << one << "' two='" << two << "'\n";
}