我这样定义列表:
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;
这些只是更大项目中的代码片段,因此,如果您需要任何上下文,请随时提出,但我认为可以提供足够的信息。我也知道缺少一些东西,例如列表的完整连接等等。
我正在寻找一种方法来将字符串扫描为vname,nname和adresse,其中包含空格。现在,当我尝试执行此操作时,整个程序会变得很麻烦。
谢谢。
答案 0 :(得分:0)
尝试使用scanf(“%[^ \ n] s”,elp-> vname); 它将读取字符串直到换行符。
答案 1 :(得分:-2)
您可以改为使用gets
,例如:gets(elp -> vname);