我正在制作一个 C 程序,它需要将书籍上的数据作为输入并创建一个有序列表。数据以 CSV 格式输入。每本书的信息如下:“ISBN 代码”、“书名”、“作者”、3 个字符串。
我使用带有“,”分隔符的 strtok 将输入信息分成三个字符串,然后我需要将这些字符串传递给插入函数。除非字段中有空格,否则这似乎工作正常。例如,
111111,AAA,BBB将正常工作但
111111,A AA,BBB不会。
这是我的代码:
Book book; // previously defined struct
char data[212];
scanf("%s", data);
char *field;
field = strtok(data, ",");
if(field != NULL) {
strcpy(book.isbn, field);
}
field = strtok(NULL, ",");
if(field != NULL) {
strcpy(book.title, field);
}
field = strtok(NULL, ",");
if(field != NULL) {
strcpy(book.author, field);
}
Run Code Online (Sandbox Code Playgroud)
使用此输入:
1,A,B
我1 - A - B
从一个函数中获取输出
,该函数应该遍历列表并打印所有字段,以“-”分隔,后跟换行符。
有了这个输入:
1,A A,b
我得到以下输出:
A - b -
1 - A -
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
读取非空白字符的%s格式说明scanf符。因此,如果输入中有空格,它将停止在该空格处读取。
尝试使用fgets,它将读取整行文本:
fgets(data, sizeof(data), stdin);
Run Code Online (Sandbox Code Playgroud)
因为这个函数会在它读取的字符串中包含一个换行符,所以添加\n到你的strtok调用的分隔符列表中:
field = strtok(NULL, ",\n");
Run Code Online (Sandbox Code Playgroud)