将带有空格的字符串读入列表变量

时间:2019-01-07 16:20:38

标签: c string input linked-list user-input

我这样定义列表:

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,其中包含空格。现在,当我尝试执行此操作时,整个程序会变得很麻烦。

谢谢。

2 个答案:

答案 0 :(得分:0)

尝试使用scanf(“%[^ \ n] s”,elp-> vname); 它将读取字符串直到换行符。

答案 1 :(得分:-2)

您可以改为使用gets,例如:gets(elp -> vname);