我这样定义我的列表:
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:tt "); scanf("%s", elp -> vname); // Vorname
printf(" Nachname:tt "); scanf("%s", elp -> nname); //Nachname
printf(" Matrikelnummer:tt "); scanf("%d",&(elp -> mnr));
printf(" Adresse:tt "); scanf("%s", elp -> adresse); // Adresse
printf(" Pflichtkurse:tt "); scanf("%d", &(elp -> pfkur)); //
elp -> next = studentlist;
studentlist = elp;
这些只是一个更大项目中的代码片段,所以如果您需要任何上下文,请随时询问,但我认为提供了足够的信息。我也知道缺少一些东西,例如列表的完整连接等等。
我正在寻找一种方法将字符串扫描到带有空格的 vname、nname 和地址中。现在,当我尝试这样做时,整个程序变得非常错误。
提前谢谢你。
尝试使用 scanf("%[^]s", elp -> vname);它将读取字符串到换行符。
你可以
改用gets
,如下所示: gets(elp -> vname);