【发布时间】:2019-01-07 16:20:38
【问题描述】:
我这样定义我的列表:
struct student {
char vname[30]; // Vorname
char nname[30]; // Nachname
int mnr; // Matrikelnummer
char adresse[50]; // Adresse
int pfkur; // Anzahl der bereits belegten Pflichtkurse
struct student *next; //Zeiger auf Nachfolger
struct student *prev; // Zeiger auf Vorgänger
};
typedef struct student student;
typedef struct student *pstudent;
现在我无法扫描带有空格的字符串,例如“van Helsing”
我将事物扫描到列表中的实现是这样的:
pstudent allocate(void){
pstudent elp;
elp = (pstudent)malloc(sizeof(*elp));
if (elp == NULL){printf("ERROR: malloc"); exit(1);}
elp -> next = NULL;
return elp;
} /* allocate */
elp = allocate();
printf("\n Vorname:\t\t "); scanf("%s", elp -> vname); // Vorname
printf(" Nachname:\t\t "); scanf("%s", elp -> nname); //Nachname
printf(" Matrikelnummer:\t\t "); scanf("%d",&(elp -> mnr));
printf(" Adresse:\t\t "); scanf("%s", elp -> adresse); // Adresse
printf(" Pflichtkurse:\t\t "); scanf("%d", &(elp -> pfkur)); //
elp -> next = studentlist;
studentlist = elp;
这些只是一个更大项目的代码 sn-ps,所以如果您需要任何上下文,请随时询问,但我认为提供了足够的信息。我也知道缺少一些东西,例如列表的完整连接等等。
我正在寻找一种将字符串扫描成 vname、nname 和 adresse 的方法,其中包含空格。现在,当我尝试这样做时,整个程序变得非常有问题。
提前谢谢你。
【问题讨论】:
-
我会尝试 fgets(),它会一直读取到新行或设置的最大容量
-
我想这会起作用,但语法会是什么样子呢?因为对于 scanf() 我使用语法 elp -> vname 例如
-
fgets() 声明:char fgets(char *str, int n, FILE *stream)。所以: fgets(elp -> vname, 30, stdin)* 查看 fgets() 手册页了解更多信息
标签: c string input linked-list user-input