2012-11-02 33 views
0

我试图接受来自文件的输入。该文件的格式为整数,后跟一个制表符,后跟一个字符串(可能有也可能没有空格)。用Ints和字符串接受带空格的输入C

例如:

1\tls -l 
2\tls 

我试着使用:

int cmd_num; 
char command[80]; 

while (fscanf(ifp, "%d\t%s", &cmd_num, command) != EOF) { 
... 
} 

但是这并没有当它看到了一个空间。任何帮助?

感谢

+0

我不明白,当它看见一个space_是读1 \ _this失败tls –

+0

这适用于没有任何字符串有空格的情况。但是,当一个字符串有一个空格时,它会进入无限循环。 – user1742385

+0

你能发布失败的文件输入吗? –

回答

1

您可能需要使用扫描设置读取字符串:

if (fscanf(fp, "%d\t%79[^\n]\n", &cmd_num, command) != 2) 
    ...error handling... 
else 
    ...use cmd_num and command... 

注意大小限制在格式字符串来防止缓冲区溢出。

请注意,您不知道换行符是否匹配。使用fgets()来读取整行(或getline()),然后使用sscanf()代替fscanf();至少你会知道是否收集了换行符(如果需要的话可以吞并换行符)。

0

在fscanf函数试试这个:

fscanf(fp,"%d\t%[^\n]s",&cmd_num,command);

这必将努力......

+0

你不需要扫描设置's'。请注意,它实际上并不会造成问题,但那只是因为它是在格式字符串的最后一次转换之后发生的,并且您无法检测到何时存在不匹配。 –