gpt4 book ai didi

c - 结构体和符号数组

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

你能帮我吗?我的 char* station 有问题;当我填补空白时,一切都很好,但是当我使用 printf("%d) 输入其电台:",i+1); 时。这是一个问题,我的意思是:我输入 chech-joch-chor-dsh-dsh 但我需要输入 chech joch chor dsh dsh(这些是电台的名称,它是一个例子)。所以它打印仅第一个单词,我不知道为什么..请检查一下...(我知道我需要释放我所拿的东西)。请解释一下为什么会这样,为什么是第一个?..给我一个提示..

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>



typedef struct info_bus_{
int number;
int begin;
int end;
char* stations;
int time_working;
}info_bus;


int main()
{

info_bus *b=NULL;
int i,n;
char buffer[128];
printf("How many buses u have: ");
scanf("%d",&n);

b=(info_bus *)malloc(n*sizeof(info_bus));

for(i=0;i<n;i++){
printf("Input the number of a bus: ");
scanf("%d",&(b+i)->number);

printf("%d)Input when it starts to work: ",i+1);
scanf("%d",&(b+i)->begin);

printf("%d)Input when it finishes to work: ",i+1);
scanf("%d",&(b+i)->end);

printf("%d)Input its stations: ",i+1);
scanf("%127s", buffer);
b[i].stations = (char*) malloc(strlen(buffer) + 1);
strcpy(b[i].stations, buffer);

printf("Input time working: ");
scanf("%d",&(b+i)->time_working);
}
for (i=0;i<n;i++){
printf("\n[%d].the number of a bus: %d",i+1,b->number);
printf("\n[%d]. Begin at: %d",i+1,b->begin);
printf("\n[%d]. Finishes at: %d",i+1,b->end);
printf("\n[%d]. Stations: %s",i+1,b->stations);
printf("\n[%d]. Time working: %d",i+1,b->time_working);
printf("\n");
}

return 0;
}

但是当我使用gets()时这是: enter image description here

最佳答案

    scanf("%127s", buffer);

遇到换行符后停止读取。如果您希望能够阅读多个单词,请使用 fgets() :

    fgets(buffer, sizeof buffer, stdin);

注意:如果有空间,fgets() 还将读取换行符。如果需要,您可以将其删除:

    buffer[strcspn(buffer, "\n")] = 0; /* to remove the newline */

一般情况下,即使对于其他输入,也应避免使用 scanf()。这很容易出错。请参阅:Why does everyone say not to use scanf? What should I use instead?

此外,malloc() 的转换也是不必要的。请参阅:What's wrong with casting malloc's return value?

关于c - 结构体和符号数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41315934/

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