我是一名超级初学者程序员。基本上我有这个代码:
int main()
{
char name[30];
printf("Name of the animal exchange: \n");
scanf(" %s", &name);
char animalname[14];
int quantity = 0;
int quantitysum;
int type = 1;
do {
printf("A(z) %d. fajta neve: \n", type);
scanf(" %s", &animalname);
while(strlen(animalname)<15) {
printf("Quantity: \n");
scanf(" %d", &quantity);
quantitysum += quantity;
break;
}
if(strlen(animalname)<15) {
type++;
}
} while (animalname != "");
}
我认为循环应该在按下时按下一个输入停止。有什么问题?
答案 0 :(得分:2)
您无法将字符串与!=
进行比较,因为这只会比较指针。相反,您必须使用strcmp
或类似功能:
while (strcmp(animalname, "") != 0);
答案 1 :(得分:0)
使用fgets()
获取输入。当您按下输入时,%s
格式说明符不会扫描任何内容,而fgets
会扫描它。此外,变化
scanf(" %s", &name);
到
scanf(" %s", name);
这样做是因为数组的名称衰减为指向其第一个元素的指针。使用scanf
将fgets
放在下面:
scanf(" %s", &animalname);
此外,必须使用strcmp()
中的string.h
函数进行字符串比较。通过使用==
,您可以比较指针(回想一下数组名称衰减到指向其第一个元素的指针)。您的完整代码将如下所示
int main()
{
char name[30];
printf("Name of the animal exchange: \n");
scanf(" %29s", name); //scan at-most 29 (+1 for the `\0`)
char animalname[14];
int quantity = 0;
int quantitysum=0; //initialize to zero
int type = 1;
do {
printf("A(z) %d. fajta neve: \n", type);
fgets(animalname,14,stdin);
if(strlen(animalname)<15) { //You have a break in the loop which means that you need an if as it will execute just once
printf("Quantity: \n");
scanf(" %d", &quantity);
quantitysum += quantity;
type++; //This can be done here itself
//break;
}
/*if(strlen(animalname)<15) {
type++;
} This is done in the previous if*/
} while (strcmp(animalname,"")!=0);
}
请注意,if
始终为真,因为fgets()
会限制其读取的字符数。所以你可以删除它。
答案 2 :(得分:0)
它不会终止,因为while中的条件不会改变.....想要c#guide购买此书http://shoppingict.blogspot.com/2014/12/book-ultimate-c-guide-for-dummies.html?m=1