我需要fscanf建议

时间:2012-07-19 09:43:18

标签: c scanf

我想fprintf() 3个字符串到一个文件,都在同一行。

前三个不能包含空格,而第三个可以。 I.E. word word rest of line

有人可以告诉我如何将fscanf()变成3个变量吗?

如果它更容易,我不介意放一些分隔符。例如。 [word] [word] [rest of line]

2 个答案:

答案 0 :(得分:4)

你也可以在没有分隔符的情况下做到这一点:

char s1[32], s2[32], s3[256];

if(sscanf(line, "%31s %31s %255[^\n]", S1, S2, S3) == 3)
 /* ... */

这应该有用,只要输入line实际上以换行符结束。

当然,您应该调整字符串大小以适应。此外,您可以使用预处理器获取技巧以避免重复大小,但这样做会使其更复杂,因此我在本示例中避免使用它。

答案 1 :(得分:1)

您可以使用scanf扫描两个字,然后使用fgets来获取剩下的字。

FILE *f = stdin; // or use fopen to open a saved file

// use buffers large enough for your needs
char word1[20];
char word2[20];
char restOfLine[100];

// make sure fscanf returns 2 (indicating 2 items scanned successfully)
fscanf(f, "%20s %20s", word1, word2); 

// make sure fgets returns &restOfLine[0]
fgets(restOfLine, sizeof restOfLine, f);

请注意,如果fgets遇到'\n'字符,它也会被放入缓冲区,因此如果您不想要它,则必须手动将其删除。如果fscanf返回2以外的内容,或fgets返回NULL,则会在阅读您的输入时出现问题。