循环不能在我的c代码中工作

时间:2017-03-19 22:15:12

标签: c loops if-statement break

下面是我的c代码,永远的for(;;)循环不是基于我使用if语句给出它的条件。有什么事我做错了吗?我的代码如下:

 #include <stdio.h>
 main()
{
/*
 * Program starts
 */

 int       tracks;                             /* tracks is declared as a variable for the number of tracks */
 float     price;                              /* Price is declared as variable for number of tracks */
 char      title[100];                         /* title is declared as a varibel for the title of thr CD*/
 char      album_single[2];                    /* album_single is a variable declared  for either the CD is a single or an album */
 char      artiste[50];


 printf("Welcome to the CD database\n\n");
 printf("Please enter the details of the CD below...\n");

/*
 * First, title
 */
 printf("Title? ");
 scanf("%[^\n]", title);

/*
 * Next, Artiste
 */
 printf("Artiste? ");
 fflush(stdin);
 scanf("%[^\n]", artiste);

/*
 * Next, number of tracks
 */
 printf("Number of Tracks? ");
 fflush(stdin);
 scanf("%d",&tracks);

/*
 * Next, Type(album or single)
 */

 for(; ;)
 {
     printf("ALbum or a single (Enter 'a' for an album and 's' for a single): ");
     fflush(stdin);
     scanf("%c", &album_single);

     if(album_single == "a" || album_single == "s")
          break;

     printf("Error!\n");
 }


/*
 * Conditions to assign the right type(album/single) to the variable album_single
 */
 if(strcmp(album_single, "a") == 0)
 {

      strcpy(album_single,"Album");
 }
  else
  {
     if(strcmp(album_single, "s") == 0)
         strcpy(album_single, "single");
  }

/*
 * Finally, Price
 */
 printf("Retail Price(e.g $4.66)? ");
 fflush(stdin);
 scanf("%f", &price);

/*
 * Details, finallly output
 */
 printf("\n\nDetails of  %s's CD\n", title);
 printf("========================\n");
 printf("Title: %s\n",title);
 printf("Artiste: %s\n", artiste);
 printf("Number of tracks: %d\n",tracks);
 printf("Album/Single: %s\n", album_single);
 printf("Price:$ %.2f\n", price);
 printf("========================\n");

/*
 * User Friendly exit of the program
 */
 printf("\n Press ENTER to exit the program.");

/* 
 * Program end
 */
 fflush(stdin);
 getchar();
}

下面是永远for(;;)循环的一部分,它没有突破:

 for(; ;)
 {
     printf("ALbum or a single (Enter 'a' for an album and 's' for a single): ");
     fflush(stdin);
     scanf("%c", &album_single);

     if(album_single == "a" || album_single == "s")
          break;

     printf("Error!\n");
 }

即使输入是&#39; a&#39;此循环也会继续循环。或者&#39;。我在这段代码中做错了什么?

3 个答案:

答案 0 :(得分:0)

试试这个:

char      album_single; 

while (album_single != 'a' && album_single != 's')
{
     printf("Album or a single (Enter 'a' for an album and 's' for a single): ");
     scanf("%c", &album_single);
     scanf("%c"); // discard carriage return
}

实验注释掉最后一个scanf()语句,看看会发生什么。

答案 1 :(得分:0)

此代码使用比较中的strcmp()函数而不是==来解决问题。

正确的代码   if(strcmp(album_single, "a") == 0 || strcmp(album_single, "s") == 0 )

错误的代码    if(album_single == "a" || album_single == "s")

感谢你们的贡献。!!

答案 2 :(得分:0)

您无法使用==运算符比较字符串。将album_single声明为字符,或使用strcmp()函数。

if(strcmp(album_single, "a")==0||strcmp(album_single, "s")==0) break;

请记住包含正确的头文件。