为什么变量在程序的一个部分中正确打印而在另一部分中不能正确打印

时间:2012-07-25 16:39:15

标签: c

我的计划中有什么错误?这是代码:

/*
 * 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);并且它正常工作,但它在程序结束时不起作用。变量始终为空。

2 个答案:

答案 0 :(得分:2)

变量numberOfTracksshort int,但您正在使用scanf的{​​{1}}说明符读取它,该说明符读取%d。这会导致未定义的行为 - 在这种情况下,它可能会覆盖其他变量,例如int

使用artist说明符(读取%hd),或将变量更改为short int

答案 1 :(得分:0)

好吧,numberOfTracks是一个简短的,你正在做一个scanf(&#34;%d&#34;,&amp; numberOfTracks),这将产生有趣的结果。

另外,main是int main(),你应该返回一个值。此代码的可能结果是您的程序将以随机值终止,该值恰好与用户的按键密切相关。