我试图接受来自文件的输入。该文件的格式为整数,后跟一个制表符,后跟一个字符串(可能有也可能没有空格)。用Ints和字符串接受带空格的输入C
例如:
1\tls -l
2\tls
我试着使用:
int cmd_num;
char command[80];
while (fscanf(ifp, "%d\t%s", &cmd_num, command) != EOF) {
...
}
但是这并没有当它看到了一个空间。任何帮助?
感谢
我试图接受来自文件的输入。该文件的格式为整数,后跟一个制表符,后跟一个字符串(可能有也可能没有空格)。用Ints和字符串接受带空格的输入C
例如:
1\tls -l
2\tls
我试着使用:
int cmd_num;
char command[80];
while (fscanf(ifp, "%d\t%s", &cmd_num, command) != EOF) {
...
}
但是这并没有当它看到了一个空间。任何帮助?
感谢
您可能需要使用扫描设置读取字符串:
if (fscanf(fp, "%d\t%79[^\n]\n", &cmd_num, command) != 2)
...error handling...
else
...use cmd_num and command...
注意大小限制在格式字符串来防止缓冲区溢出。
请注意,您不知道换行符是否匹配。使用fgets()
来读取整行(或getline()
),然后使用sscanf()
代替fscanf()
;至少你会知道是否收集了换行符(如果需要的话可以吞并换行符)。
在fscanf函数试试这个:
fscanf(fp,"%d\t%[^\n]s",&cmd_num,command);
这必将努力......
你不需要扫描设置's'。请注意,它实际上并不会造成问题,但那只是因为它是在格式字符串的最后一次转换之后发生的,并且您无法检测到何时存在不匹配。 –
我不明白,当它看见一个space_是读1 \ _this失败tls –
这适用于没有任何字符串有空格的情况。但是,当一个字符串有一个空格时,它会进入无限循环。 – user1742385
你能发布失败的文件输入吗? –