【发布时间】:2015-03-17 11:32:03
【问题描述】:
我有一个文件需要从某些变量中读取。信息存储在带有分隔符的文件中;将每一位信息分开。例如:
308163583 ;Adam ;Fro ;22;M ;mogar ;mmMM8675 ;喜欢在沙滩上散步 ;1,2,3,4;
之后我将把这些信息放入一个结构中,但现在不相关了。问题是它扫描一切都很好,直到“喜欢在沙滩上散步”,它停在“喜欢”,只把这个词扫描成描述字符串
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXID 10
#define MAXN 11
#define MAXPAS 7
#define MAXDES 201
#define MAXHOB 4
#define MAXGEN 2
typedef enum { false, true } bool;
typedef struct {
char* id;
char* fname;
char* lname;
int age;
char* gender;
char* username;
char* password;
char* description;
int hobbies;
}User;
typedef struct {
User *users;
int num_users;
}List;
void inputFunction(FILE *ifp);
void main() {
FILE *ifp;
char mode[] = "r";
ifp = fopen("input.txt", mode);
if (ifp == NULL) {
puts("Can't open input file");
exit(1);
}
inputFunction(ifp);
}
void inputFunction(FILE *ifp) {
List userList;
userList.users = (User*)malloc(1 * sizeof(User));
int i = 0;
char id[MAXID], fname[MAXN], lname[MAXN], gender[MAXGEN],
username[MAXN], password[MAXPAS], description[MAXDES];
int age, hobbies[MAXHOB];
while (fscanf(ifp, "%s ;%s ;%s ;%d;%s ;%s ;%s ;%s;%d,%d,%d,%d", id,
fname, lname, &age, gender, username, password, description,
&hobbies[0], &hobbies[1], &hobbies[2], &hobbies[3])!=EOF)
{
}
}
【问题讨论】:
-
scanf()会忽略空格字符,%s指令会在找到空格时停止。 -
这是
int main(void)而不是void main(void)。 -
int hobbies;错字? -
@BLUEPIXY:“爱好”是“爱好”的复数形式。类似于“婴儿”、“女士”等。
-
添加到@iharob 所说的内容:因此,在描述已填充“like”之后输入中的下一个“token”是“to”,它是非数字的,不适合 %d 所以那个 scanf() 在那里中止。