我想将fprintf()
3 个字符串写入一个文件,全部在同一行。
前两个不能包含空格,而第三个可以。IEword word rest of line
有人可以告诉我如何将fscanf()
其转换为 3 个变量吗?
如果它更容易,我不介意放置一些分隔符。例如[word] [word] [rest of line]
您也可以在没有分隔符的情况下执行此操作:
char s1[32], s2[32], s3[256];
if(sscanf(line, "%31s %31s %255[^\n]", S1, S2, S3) == 3)
/* ... */
只要输入line
确实以换行符结尾,这应该可以工作。
当然,您应该调整字符串大小以适应。你也可以使用预处理器来避免重复大小,但是这样做会使它变得更加复杂,所以我在这个例子中避免了这个。
您可以使用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 或 return 以外的值,则说明读取您的输入时出现问题。fgets
NULL