用c ++读取输入

时间:2013-09-05 17:26:47

标签: c++ scanf stdio

我是c +的新手并尝试迈出第一步。在我的问题中,我需要阅读3个整数并用它做一些事情。所以,为了得到这个整数,我写道:

int a, b, n;
scanf("%i%i\n", &a, &b);
scanf("%i", &n);

我也尝试过:

scanf("%i%i", &a, &b);
scanf("%i", &n);

但他总是给我一些n的随机大整数。 输入:

7 13
1

TY

如果我写

freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);

int a, b, n;
cin >> a >> b;
cin >> n;
printf("%i", n);
return 0;

它不起作用。和

一样
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);

int a, b, n;
scanf("%i%i", &a, &b);
scanf("%i", &n);    
printf("%i", n);
return 0;

2 个答案:

答案 0 :(得分:2)

这不是在C ++中输入整数的方式。尝试:

std::cin >> a >> b >> c;

但如果你想在第一行有两个,第三个在第二行 一个单独的行,您可能想要逐行阅读(使用 std::getline):

std::string line;
std::getline( std::cin, line );
std::istringstream l1( line );
l1 >> a >> b >> std::ws;
if ( !l1 || l1.get() != EOF ) {
    //  The line didn't contain two numbers...
}
std::getline( std::cin, line );
std::istringstream l2( line );
l2 >> n >> std::ws;
if ( !l2 || l1.get() != EOF ) {
    //  The second line didn't contain one number...
}

这将允许更好的错误检测和恢复 (假设输入格式是面向行的)。

你应该忘记scanf。这很难使用 正确,而且不是很灵活。

答案 1 :(得分:0)

如果您使用的是C ++,是否有理由不使用流?

std::cin >> a >> b;
std::cin >> n;

要从文件中读取,您将使用std :: ifstream。

std::ifstream file( "filename.txt" );
if( file.is_open() )
{
    file >> a >> b >> n;
    file.close();
}

cppreference.com是一个很好的参考:ifstream