1

PrintLines 函数必须恰好具有三个形式参数,它们都是 int 类型。

PrintLines 的 3 参数版本中的参数从左到右表示要打印的字符的值、字符在一行上打印的次数以及要生成的行数。

例如, PrintLines('C', 5, 2) 将导致:

中国交建

中国交建

PrintLines 函数使用 int 类型参数来表示此字符。但请注意,在存在函数原型的情况下调用时,所有兼容的参数都将转换为相应函数参数的类型。这意味着即使您使用 char 类型变量从用户那里获取所需的字符,如果将其传递给具有 int 类型参数的函数,它也会自动转换为 int 类型。但是,为避免可能的编译器警告,请在传递此类参数时使用类型转换。此外,始终将函数声明为返回类型 void ,除非返回值将用于有意义的目的。

我的问题是我不知道如何正确键入强制转换“a”参数。要求是 PrintLines 接受三个 int 参数,但如果我为参数“a”输入一个非整数,程序就会崩溃。我尝试在原型、函数头和输出中输入“a”变量。我包含了一些注释代码,以显示我迄今为止尝试过的内容。代码可以编译,但我认为存在运行时/逻辑错误。

有人可以帮忙吗?

这是 main.cpp 的代码

#include<iostream>

using namespace std;

int a ;
int b ;
int c ;

void PrintLines( int, int, int ) ;

int main(void)
{

  //cin >> (char)a >> b >> c ;
  cin >> a >> b >> c ;
  cout  << '\n' ;
  //PrintLines( (char)a, b, c ) ;
  PrintLines( a, b, c ) ;
  cout  << '\n' ;

  system("pause");
  return 0;

}

这是 PrintLines.cpp 的代码

#include<iostream>

using namespace std;

//void PrintLines( char a, int b, int c )
//void PrintLines( (char) a, int b, int c )
void PrintLines( int a, int b, int c )
{
  for(int i = 0; i < c;  i++)
  {

    for(int j = 0; j < b; j++)
    {
      //cout << (char) (a - 48);
      //cout<< (char) a << '\n' ;
      cout << a ;
    }

    cout << '\n' ;
  }     

}
4

2 回答 2

2

当您cout <<与 an 一起使用时,int您会得到一个数字输出,而不是一个字符。您需要将参数类型转换为char.

cout << (char) a;

另一个问题是您将字符读取为整数。如果您使用aachar而不是int,它将被读取为单个字符,并int在函数调用中自动向上转换为。

于 2013-11-05T04:35:21.337 回答
0

使用 static_cast!

cout << static_cast<char>(a);

更好地使用正确的演员表而不是 c 风格的演员表

于 2013-11-05T06:30:48.967 回答