如何在cpp中读取多行

How to read multiple lines in cpp?

本文关键字:读取 cpp      更新时间:2023-10-16

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

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] = '';
    i = 0;
    while((c = getchar()) != 'n') {
        two[i++] = c;
    }
    two[i] = '';
    cout<<one<<endl;
    cout<<two<<endl;
}

}

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

您可以使用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;
}

我与输入无关,但在读取每一行之前,您需要重置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";
}