-1

私のプログラムのエラーは何ですか? これはコードです:

/*
 * courseProject.c
 *
 * It is a simple database for record shop
 * to track its iventory of CDs
 *
 * by Mahmoud Emam, 2012.
 */
#include<stdio.h>

main()
{
      /*
       * CDs infrormations
       */
      char title[31], artist[31];
      short int numberOfTracks;  /* short to save memory */
      int albumOrSingle;         /* Boolean to check 1 for Album and 0 for Single */
      float price;

      printf("Hello, Welcome to Record Shop!\n\n");
      /*
       * Asking for CD details
       */
      printf("Enter CD details\n\n");
      printf("CD's Title: ");
      scanf("%[^\n]", title);
      fflush(stdin);

      printf("CD's Artist: ");
      scanf("%[^\n]", artist);


      printf("Number of tracks: ");
      scanf("%d", &numberOfTracks);


      printf("Please press \"1\" for album, \"0\" for single: ");
      scanf("%d", &albumOrSingle);


      printf("CD's Price: ");
      scanf("%f", &price);

      /*
       * Output CD details
       */
      printf("\nCD details:\n");
      printf("=============\n\n");

      printf("CD's Title: <%s>\n", title);
      printf("CD's Artist: <%s>\n", artist);
      printf("Number of tracks: <%d>\n", numberOfTracks);

      if (albumOrSingle)
         printf("This is <Album>\n");
      else
         printf("This is <Single CD>\n");

      printf("Its price = <%.2f>\n", price);
      printf("=============\n\n");

      /* Exit from program */
      printf("Press any key to exit\n");

      fflush(stdin);
      getchar();
}

これは、ユーザーから CD 情報を読み取り、その詳細を再度画面に出力する単純なプログラムです。ただし、artist変数は常に空です。なんで?

printf("%s", artist);ユーザーから読んで作ったところ正常に動作するのですが、プログラムの最後で動作しません。変数は常に空です。

4

2 に答える 2

2

変数numberOfTracksshort intですが、を読み取るscanf'%d指定子を使用して読み取っていintます。これにより、未定義の動作が発生します。この場合、おそらく。などの他の変数が上書きされartistます。

%hd指定子(を読み取る)を使用するかshort int、変数をに変更しますint

于 2012-07-25T17:01:12.583 に答える
0

numberOfTracks は短いので、興味深い結果が得られる scanf("%d", &numberOfTracks) を実行しています。

また、main は int main() であり、値を返す必要があります。このコードの結果として、ユーザーのキー押下に密接に関連するランダムな値でプログラムが終了する可能性があります。

于 2012-07-25T17:05:16.827 に答える