坏:C++;#输入输出调试 这是我的C++作业调试问题,是关于I/O的,我调试了很多错误。程序没有报告错误,但其结果是错误的。 其结果应该是: 输入一个数字:2.3456 输入一个数字:0.895 x的值为:+2.346000000 y的值为:8.95e-001 但我的结果是: 输入一个数字:2.3456 输入一个数字:0.895 x的值为:
它没有给我正确的x,也没有给我正确的y 我不知道怎么了 我的代码:坏:C++;#输入输出调试 这是我的C++作业调试问题,是关于I/O的,我调试了很多错误。程序没有报告错误,但其结果是错误的。 其结果应该是: 输入一个数字:2.3456 输入一个数字:0.895 x的值为:+2.346000000 y的值为:8.95e-001 但我的结果是: 输入一个数字:2.3456 输入一个数字:0.895 x的值为:,c++,C++,它没有给我正确的x,也没有给我正确的y 我不知道怎么了 我的代码: // Debugging problem #include <iostream> using std::cout; using std::endl; using std::cin; using std::ios; #include <iomanip> using std::setw; using std::setprecision; using std::resetiosflag
// Debugging problem
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
using std::ios;
#include <iomanip>
using std::setw;
using std::setprecision;
using std::resetiosflags;
double readNum();
double printFormatted( double, double );
int main()
{
double x, y;
x = readNum();
y = readNum();
printFormatted( x, y );
return 0;
}
double readNum()
{
double num = 0;
double place = 10;
cout << "Enter a number: ";
// num = cin.getline() - '0';
num = cin.get() - '0';
while ( cin.peek() != '.' && cin.peek() != '\n' )
// num = num * 10 + atof( cin.get() );
num = num * 10 + static_cast<double>(cin.get());
while ( cin.peek() != '.' )
{
num = num + static_cast< double >
( cin.get() ) / place;
place *= 10;
}
cin.ignore();
return num;
}
double printFormatted( double x, double y )
{
char buffer[] = "The value of x is: ";
for ( int i = 0; buffer[ i ] != '\n'; i++ )
cout.put( buffer[ i ] );
cout << setw( 12 ) << setprecision( 3 )
<< std::setfill( '0' )
<< std::setiosflags( ios::fixed | ios::showpoint |
ios::left)
<< x << endl;
// cout.write("The value of y is: ");
char buffe[] = "The value of y is: ";
for (int i = 0; buffe[i] != '\n'; i++)
cout.put(buffe[i]);
cout << resetiosflags( ios::showpoint )
<< setprecision( 2 )
<< std::setiosflags( ios::scientific | ios::right )
<< y << endl;
return 0;
}
//调试问题
#包括
使用std::cout;
使用std::endl;
使用std::cin;
使用std::ios;
#包括
使用std::setw;
使用std::setprecision;
使用std::resetiossflags;
双readNum();
双重打印格式(双重,双重);
int main()
{
双x,y;
x=readNum();
y=readNum();
打印格式(x,y);
返回0;
}
双readNum()
{
双数=0;
双位=10;
库特
(cin.get())/place;
地点*=10;
}
cin.ignore();
返回num;
}
双打印格式(双x,双y)
{
char buffer[]=“x的值为:”;
对于(int i=0;缓冲区[i]!='\n';i++)
cout.put(缓冲器[i]);
库特
您可以删除这些行
及
只要写
cout << buffer;
您对cout
使用了不同的标志,但忘记了它们不会被重置。
在使用之前,必须保存默认标志并还原
总之
double readNum();
double printFormatted( double, double );
std::ios_base::fmtflags defaultFlags(cout.flags());
int main()
{
double x, y;
x = readNum();
y = readNum();
printFormatted( x, y );
return 0;
}
double readNum()
{
double num = 0;
double place = 10;
cout << "Enter a number: ";
num = cin.get() - '0';
while ( cin.peek() != '.' && cin.peek() != '\n' ) {
num = num * 10 + cin.get() - '0';
}
if (cin.peek() == '.') {
cin.get();
}
while (cin.peek() != '\n')
{
num = num + (cin.get() - '0') / place;
place *= 10;
}
cin.ignore();
return num;
}
double printFormatted( double x, double y )
{
char buffer[] = "The value of x is: ";
cout << buffer
<< setw( 12 ) << setprecision( 3 )
<< std::setfill( '0' )
<< std::setiosflags( ios::fixed | ios::showpoint |
ios::left)
<< x << endl;
cout.flags(defaultFlags);
char buffe[] = "The value of y is: ";
cout << buffe
<< resetiosflags( ios::showpoint )
<< setprecision( 2 )
<< std::setiosflags( ios::scientific | ios::right )
<< y << endl;
return 0;
}
您可以删除这些行
及
只要写
cout << buffer;
您对cout
使用了不同的标志,但忘记了它们不会被重置。
在使用之前,必须保存默认标志并还原
总之
double readNum();
double printFormatted( double, double );
std::ios_base::fmtflags defaultFlags(cout.flags());
int main()
{
double x, y;
x = readNum();
y = readNum();
printFormatted( x, y );
return 0;
}
double readNum()
{
double num = 0;
double place = 10;
cout << "Enter a number: ";
num = cin.get() - '0';
while ( cin.peek() != '.' && cin.peek() != '\n' ) {
num = num * 10 + cin.get() - '0';
}
if (cin.peek() == '.') {
cin.get();
}
while (cin.peek() != '\n')
{
num = num + (cin.get() - '0') / place;
place *= 10;
}
cin.ignore();
return num;
}
double printFormatted( double x, double y )
{
char buffer[] = "The value of x is: ";
cout << buffer
<< setw( 12 ) << setprecision( 3 )
<< std::setfill( '0' )
<< std::setiosflags( ios::fixed | ios::showpoint |
ios::left)
<< x << endl;
cout.flags(defaultFlags);
char buffe[] = "The value of y is: ";
cout << buffe
<< resetiosflags( ios::showpoint )
<< setprecision( 2 )
<< std::setiosflags( ios::scientific | ios::right )
<< y << endl;
return 0;
}
for(int i=0;buffer[i]!='\n';i++)
--字符串文字不保证以'\n'
结尾。这是读取超过缓冲区
数组的结尾。将其更改为'\0'
。更好的是,不知道为什么您要以这种方式读取数字,而不是cin>>num
?(int i=0;buffer[i]!='\n';i++)
--字符串文字不保证以'\n'
结尾。这是读取超过缓冲区
数组的结尾。将其更改为'\0'
。更好的是,不能用这种方式读取数字,而不是cin>>num
?
std::ios_base::fmtflags defaultFlags(cout.flags());
cout.flags(defaultFlags);
double readNum();
double printFormatted( double, double );
std::ios_base::fmtflags defaultFlags(cout.flags());
int main()
{
double x, y;
x = readNum();
y = readNum();
printFormatted( x, y );
return 0;
}
double readNum()
{
double num = 0;
double place = 10;
cout << "Enter a number: ";
num = cin.get() - '0';
while ( cin.peek() != '.' && cin.peek() != '\n' ) {
num = num * 10 + cin.get() - '0';
}
if (cin.peek() == '.') {
cin.get();
}
while (cin.peek() != '\n')
{
num = num + (cin.get() - '0') / place;
place *= 10;
}
cin.ignore();
return num;
}
double printFormatted( double x, double y )
{
char buffer[] = "The value of x is: ";
cout << buffer
<< setw( 12 ) << setprecision( 3 )
<< std::setfill( '0' )
<< std::setiosflags( ios::fixed | ios::showpoint |
ios::left)
<< x << endl;
cout.flags(defaultFlags);
char buffe[] = "The value of y is: ";
cout << buffe
<< resetiosflags( ios::showpoint )
<< setprecision( 2 )
<< std::setiosflags( ios::scientific | ios::right )
<< y << endl;
return 0;
}
Enter a number: 2.456
Enter a number: 0.895
The value of x is: 2.4560000000
The value of y is: 8.95e-01