【发布时间】:2014-10-27 22:03:29
【问题描述】:
我在这个网站上看到:fscanf(fin, "%[^\n]", &p); 可用于从我的输入文件(fin)读取该字符类型指针(*p)中的所有字符,直到第一次输入命中。在某些输入上它可以正常工作,但在其他输入上却不能。
这是我应该处理的输入,但我不能:
(((zahar 100 ou 3) 5 unt 100 nuca 200) 4 (lapte 200 cacao 50 zahar 100)3)20
这是我的全部代码:
#include <string.h>
#include <stdio.h>
FILE *fin, *fout;
int main()
{
fin = fopen("reteta.in", "r");
fout = fopen("reteta.out", "w");
char *p;
p = new char[1001]();
fscanf(fin, "%[^\n]", &p);
fprintf(fout, "%s", &p);
return 0;
}
【问题讨论】:
-
匹配无限多个字符但不匹配
\n,并将它们放入对应参数指向的char[]。 (因此它属于char*类型,不是char**。 -
谷歌搜索
fscanf将我带到msdn.microsoft.com/en-us/library/kwwtf9ch.aspx,只需点击三下鼠标。 -
请注意
new char[1001]();不是 C -- 它是 C++ 代码。 -
尾随的
()是什么? -
您应该将
p传递给fscanf(),而不是&p。您几乎肯定应该在fout的输出中包含一个换行符。您应该在打印之前检查输入是否成功。FILE *变量应该是main()的本地变量,而不是全局变量。可以说,您应该在退出之前关闭文件(尽管运行时系统会自动关闭它们,但通常认为关闭您打开的文件是更好的做法 - 这在长时间运行的程序中确实很重要,尽管它不会损害这一点一)。