gpt4 book ai didi

c++ - c++中gets()函数的多行输入

转载 作者:行者123 更新时间:2023-11-28 01:51:39 25 4
gpt4 key购买 nike

当我编写这段代码时,我无法通过 gets() 函数输入两行作为输入,其中每行包含 3 到 5 个单词:

int main()
{
int t;
cin>>t;
char nm1[50],nm2[50];
while(t--)
{
gets(nm1);
gets(nm2);

puts(nm1);
puts(nm2);

}
}

但是当我在 while() 函数之前添加一个 gets() 函数时,我现在可以像这样输入两行字符串:

int t;
cin>>t;
char nm1[50],nm2[50];
gets(nm1); //using gets() function here//
while(t--)
{
gets(nm1);
gets(nm2);

puts(nm1);
puts(nm2);
}

那么,这背后的逻辑是什么?

最佳答案

  1. 不要使用gets。参见 Why gets() is deprecated? .
  2. 不要混合使用 cinstdio.h 中的函数。默认情况下,cinstdin 同步。但是,可以通过使用

    使它们保持不同步
    std::ios_base::sync_with_stdio(false);

    参见 http://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio了解更多详情。

真正的问题。

cin >> t;

在输入流中留下一个换行符。下一次调用 gets 读取它。如果您不希望 gets 读取该行,则必须添加代码以读取并丢弃该行的其余部分。

我的建议是:

int main()
{
int t;
cin >> t;

// Ignore the rest of the line.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

char nm1[50],nm2[50];
while(t--)
{
cin.get(nm1, 50);
cin.get(nm2, 50);

puts(nm1);
puts(nm2);
}
}

确保dd

#include <limits>

能够使用 std::numeric_limits

关于c++ - c++中gets()函数的多行输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817490/

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