下面是我的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;。我在这段代码中做错了什么?
答案 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;
请记住包含正确的头文件。