gpt4 book ai didi

c - 将字符串值从 stdin 保存到结构字段中

转载 作者:行者123 更新时间:2023-11-30 14:49:49 24 4
gpt4 key购买 nike

我试图在 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;
}

最佳答案

您应该有一个汽车数组,然后在 while 循环中您可以索引该数组。 for 循环比 while 循环更容易:

struct automobile
{
char marca[15];
char modello[20];
char targa[7];
unsigned cilindrata;
} a[6];

for (int i=0; i<6; i++)
{
fgets(a[i].marca, sizeof(a[i].marca), stdin);
// ....
}

请注意 fgets 的使用,它比 gets 更安全,因为您可以指定要读取的字符数。

指定要读取的字符数的最安全方法是使用 sizeof。这里它需要 sizeof(a[i].marca) 字符。编译器会将其替换为编译时的大小,即使 a[i] 看起来像运行时。这是最安全的,因为如果您稍后决定更改 marca 的大小,则此处要读取的大小会自动更改。

fgets 的规范表示它最多读取 n-1 个字符,因此将为字符串的终止空字符留出空间。关于最后一个参数的含义我建议您引用fgets的文档。仔细阅读它以了解其行为。

关于c - 将字符串值从 stdin 保存到结构字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49347858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com