【发布时间】:2018-08-27 02:54:44
【问题描述】:
我试图在while 循环中从标准输入(我使用char *gets(char *str))分配值,但它似乎不起作用。我有七个automobile struct`,我希望在每次迭代中,我尝试填充的变量从 a1.marca 到 a2.marca 的输入变化。我试过这个策略,但它似乎不起作用。
#include <stdio.h>
#include <stdlib.h>
struct automobile
{
char marca[15];
char modello[20];
char targa[7];
unsigned cilindrata;
} a1, a2, a3, a4, a5, a6, a7;
int main()
{
int Nauto=7, a=0;
char const id[3]={'a', '1', '\0'};
a=1;
while (Nauto>0)
{
printf ("Inserisci i dati della %d%c auto\n", a, 167);
printf ("Marca: ");
gets(id.marca);
printf ("Modello: ");
gets(id.modello);
printf ("Targa: ");
gets(id.targa);
printf ("Cilindrata: ");
scanf ("%d", &id.cilindrata);
a++;
Nauto--;
id[2]=a;
}
return 0;
}
【问题讨论】:
-
永远不要使用
gets。这是一个危险的函数,甚至已从 C 规范中删除。请改用fgets。 -
谢谢,但还有其他问题吗?
-
至于你的问题,从
1 != '1'开始。我建议你先看看例如this ASCII table(ASCII 是最常见的字符编码)。另外,您还记得数组索引是从零开始的吗?这意味着数组中的第二个元素具有索引1。 -
不要混用
fgets()和fscanf()。 go4expert.com/articles/solution-using-scanf-fgets-c-t27148 -
你的
id变量不是结构体类型,你怎么能把它当结构体。另一件事是const限定的意思是你以后不能改变它的值。