【问题标题】:Reading a string with blank spaces into a list variable [duplicate]将带有空格的字符串读入列表变量[重复]
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 不起作用,它只是使用这种语法跳过扫描 scanf("%[^\n]s", elp -> vname);
  • scanf("%[^\n]s", elp->vname);使用此语法获取输入。和打印 - printf("%s\n",elp->vname);我刚刚在 ide 上运行了这段代码,它对我有用。
【解决方案2】:

您可以改用gets,如下所示:gets(elp -> vname);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多