#include<stdio.h>
#include<iostream>
#include<cmath>
using namespace std;
void test();
int main()
{
int t;
scanf("%d",&t);
while(t--)
test();
return 0;
}
void test()
{
string AB;
getline(cin,AB);
cout<<AB<<endl;
printf("ada\n");
}
这段代码表现得很糟糕。当t = 1时,getline()语句根本不执行并直接进入printf(“ada \ n”);声明。当t = 2时,首先打印'ada'一次,然后输入一次。如果我在main()函数本身编写test()函数,则不会发生此问题。伙计们,请执行它并告诉我解决方案!我应该在发生同样错误的不同问题中使用getline()!
答案 0 :(得分:1)
主要的scanf()
通话仅消耗该号码。它会在输入数字等待后留下任何换行符。
将C样式输入与C ++样式输入混合也不是一个好主意。你最好全部使用C ++风格,也可以在整个过程中使用getline()
。
例如:
int main()
{
string line;
int t;
getline( cin, line );
sscanf( line.c_str(), "%d", &t );
// ...
}
此代码也不进行任何错误检查。为了使它真正具有防弹性,你应该加上它。