1

PrintLines 関数には、すべて int 型の 3 つの仮パラメーターが必要です。

PrintLines の 3 パラメータ バージョンのパラメータは、左から右に、印刷される文字の値、1 行に文字が印刷される回数、および生成される行数を表します。

たとえば、PrintLines('C', 5, 2) は次のようになります。

CCCCC

CCCCC

PrintLines 関数は、int 型パラメーターを使用してこの文字を表します。ただし、関数プロトタイプの存在下で呼び出されると、互換性のあるすべての引数が対応する関数パラメーターの型に変換されることに注意してください。つまり、char 型変数を使用してユーザーから目的の文字を取得したとしても、int 型パラメーターを持つ関数に渡されると、自動的に int 型に変換されます。ただし、コンパイラの警告の可能性を回避するには、そのような引数を渡すときに型キャストを使用します。また、値を返すことが意味のある目的に役立つ場合を除き、型 void を返す関数を常に宣言してください。

私の問題は、「a」パラメーターを正しく型キャストする方法がわからないことです。要件は、PrintLines が 3 つの 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 <<int、文字ではなく数値が出力されます。パラメータを に型キャストする必要がありますchar

cout << (char) a;

もう 1 つの問題は、文字を整数として読み取っていることです。の代わりにaaを作成すると、1 文字として読み取られ、関数呼び出しで自動的にアップキャストされます。charintint

于 2013-11-05T04:35:21.337 に答える
0

static_cast を使用してください。

cout << static_cast<char>(a);

Cスタイルのキャストの代わりに正しいキャストを使用する方が良い方法

于 2013-11-05T06:30:48.967 に答える