我想fprintf()
3个字符串到一个文件,都在同一行。
前三个不能包含空格,而第三个可以。 I.E. word word rest of line
有人可以告诉我如何将fscanf()
变成3个变量吗?
如果它更容易,我不介意放一些分隔符。例如。 [word] [word] [rest of line]
答案 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
,则会在阅读您的输入时出现问题。