所以我正在制作一个c ++应用程序来解决一些练习。
int i=1;
cout << "How many times :";
cin >> n;
while (n>0)
{
cout << "Input F" << i << ":";
if (cin >> a[i] && cin >> sign&& cin>>b)
{
switch (sign)
{
case'$': a[i] = a[i] * (sqrt(b));
break;
case'^': a[i] = pow(a[i], b);
break;
case'/':a[i] = a[i] / b;
break;
default: cout << "\n Wrong sign";
break;
}
}
else
a[i]=a[i];
i++;
n--;
}
在某些情况下,我不需要sing或b变量...并且应用程序doesent允许我退出if当我按Enter键。
例如:我必须输入F1:8sqrt(2)并输入8 $ 2然后输入F2:只有8然后按Enter键,但应用程序一直在询问值。
好的,现在让它工作我需要连续两次输入标志......
while (n>0)
{
cout << "Input F" << i << ":";
cin >> a[i];
if (cin.get() == '\n')
a[i] = a[i];
else {
cin >> sign;
if (sign)
cin >> b;
switch (sign)
{
case'$':
a[i] = a[i] * (sqrt(b));
break;
case'^': a[i] = pow(a[i], b);
break;
case'/':a[i] = a[i] / b;
break;
default: cout << "\n Wrong sing;
break;
}
}
i++;
n--;
}
感谢您的时间。
答案 0 :(得分:2)
你说:
在某些情况下,我不需要sing或b变量...并且应用程序doesent允许我退出if当我按Enter键。
那是因为程序正在等待您输入
所需的所有值if (cin >> a[i] && cin >> sign&& cin>>b)
您可以输入所有必要的输入或输入EOF(输入EOF是特定于平台的)来退出该声明。
通过逐行读取输入并使用std::istringstream
独立处理每一行,您会更好。
while (n>0)
{
std::string line;
cout << "Input F" << i << ":";
if ( ! getline(cin, line) )
{
// Error reading the next line.
break;
}
// Now extract the data from the line using a istringstream.
std::istringstream str(line);
if (str >> a[i] && str >> sign && str >> b)
{
switch (sign)
{
case'$': a[i] = a[i] * (sqrt(b));
break;
case'^': a[i] = pow(a[i], b);
break;
case'/': a[i] = a[i] / b;
break;
default: cout << "\n Wrong sign";
break;
}
}
else
a[i]=a[i];
i++;
n--;
}