【发布时间】:2013-12-15 23:59:21
【问题描述】:
所以这是我试图开始工作的代码:
char* inFile = "input.txt";
FILE *out = fopen("output.txt", "a+");
int i = 0
while(i < 5){
int countFound = findWord(inFile, keyWord[i]);//returns count of keywords in given file
fprintf(out, "%s: %d\n", keyWord[i], countFound);
i++;
}
fclose(out);
这段代码的输出是:
youshouldsee1
: 3
youshouldsee2
: 3
youshouldsee3
: 3
youshouldsee4
: 3
youshouldsee5: 1
预期输出:
youshouldsee1: 3
youshouldsee2: 3
youshouldsee3: 3
youshouldsee4: 3
youshouldsee5: 1
我真的不明白为什么输出是这样的,它不应该打印字符串和 int 然后换行吗?另请注意,最后一行之后没有换行符,应该有。我做了一些测试,发现如果我将fprintf 语句更改为fprintf(out, "%s\n", keyWord[i]);,输出为:
youshouldsee1
youshouldsee2
youshouldsee3
youshouldsee4
youshouldsee5
格式更好。再次注意,最后一行之后没有换行符,应该有。
我注意到,在仅使用 printf 语句执行此操作时,我遇到了完全相同的问题,但输出稍微混乱了一些。
有人知道是什么导致了这个特定问题吗?非常感谢。
数组 keyWord[] 是一个双指针,我不确定这是否有区别,但我想我会提到它。它是这样声明的char** keyWord;。它是这样创建的:
char *tempWord = "something";
keyWords[x] = strdup(tempWord);
这可能完全无关紧要,但我认为最好提一下。
【问题讨论】:
-
关键字字符串的末尾必须有换行符。
-
请添加所有变量的声明,这样我们就不用猜测了。
-
@Gene,当我创建字符串或使用 fprintf 时?
-
@hyde,对不起,我同意了。
-
创建关键字字符串时。每个关键字的末尾必须有一个换行符。这是当 fprintf 中没有换行符时出现在输出中的唯一解释。无论您传递给
strdup的内容都已经包含换行符。
标签: c file pointers fopen printf