2

我想将fprintf()3 个字符串写入一个文件,全部在同一行。

前两个不能包含空格,而第三个可以。IEword word rest of line

有人可以告诉我如何将fscanf()其转换为 3 个变量吗?

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

4

2 回答 2

4

您也可以在没有分隔符的情况下执行此操作:

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

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

只要输入line确实以换行符结尾,这应该可以工作。

当然,您应该调整字符串大小以适应。你也可以使用预处理器来避免重复大小,但是这样做会使它变得更加复杂,所以我在这个例子中避免了这个。

于 2012-07-19T09:52:59.160 回答
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'字符,它也会被放入缓冲区,因此如果您不想要它,则必须手动将其剥离。如果返回fscanf2 或 return 以外的值,则说明读取您的输入时出现问题。fgetsNULL

于 2012-07-19T10:01:37.553 回答