所以即时编写c ++程序,从输入文件中取一个整数,将其乘以2并将其输出到输出文件中。所以代码是 -
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
int n;
FILE * inFile;
FILE * outFile;
inFile = fopen ("reiz.in","r");
outFile = fopen ("reiz.out","r+");
fscanf (inFile, "%s", n);
int m = n * 2;
fprintf (outFile, "%n", n);
fclose (inFile);
fclose (outFile);
return 0;
}
但是出了点问题。在reiz.in文件中有2号,运行程序后它应该在reiz.out中输出4,但它只显示不发送错误。我的剧本究竟出了什么问题? 最好的祝福, Y2oK
编辑1:好了,现在看起来像这样 -
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
int n;
FILE * inFile;
FILE * outFile;
inFile = fopen ("reiz.in","r");
outFile = fopen ("reiz.out","r+");
fscanf (inFile, "%d", &n);
int m = n * 2;
fprintf (outFile, "%d", m);
fclose (inFile);
fclose (outFile);
return 0;
}
但是它仍然在运行reiz.exe文件时不会发送错误,并且它不会在输出文件上写任何内容 我现在有点困惑,不知道选择谁作为最佳答案,所以我会选择最“+1”的人。但是,感谢所有人!
答案 0 :(得分:5)
这是一个C程序(除using namespace std;
之外)。在C ++中,您应该使用流和格式化的I / O,如下所示:
#include <fstream>
int main() {
std::ifstream input_file("reiz.in");
int n;
input_file >> n; // read one integer
std::ostream output_file("reis.out");
output_file << n * 2 << std::endl; // calculate n * 2 and write the result
// to a file. std::endl adds a newline and
// flushes the buffer
return 0;
}
答案 1 :(得分:0)
将n
的地址传递给fscanf()
(这是一个不是字符串的整数):
fscanf (inFile, "%d", &n);
所有这些东西都有点长,除非你实际上在写'C'。如果您正在编写'C ++'
,请查看iostream
类
答案 2 :(得分:0)
您的代码存在多个问题:
#include <stdio.h>
这是C include,而不是C ++ include。相反,你应该使用:
#include <cstdio>
fscanf (inFile, "%s", n);
格式%s
适用于char*
类型的字符串。您想要读取十进制数字,因此请改用%d
。此外,您必须传递目的地的地址:
fscanf (inFile, "%d", &n);
fprintf (outFile, "%n", n);
格式%n
用于查询到目前为止写入的字节数,并且需要一个指针。由于您要写入十进制数字,请再次使用%d
:
fprintf (outFile, "%d", n);
答案 3 :(得分:0)
使用iostream(Bjorns回答)
但我认为
outFile = fopen ("reiz.out","r+");
应该是
outFile = fopen ("reiz.out","w+");
另外
fscanf (inFile, "%d", n);
应该是
fscanf (inFile, "%d", &n);
为便于参考,请使用完整的( C )程序:
#include <stdio.h>
int main() {
int n;
FILE * inFile;
FILE * outFile;
inFile = fopen ("reiz.in","r");
outFile = fopen ("reiz.out","w+");
fscanf (inFile, "%d", &n);
int m = n * 2;
fprintf (outFile, "%i", m);
fclose (inFile);
fclose (outFile);
return 0;
}
答案 4 :(得分:0)
fscanf
存在两个问题。首先,你的格式字符串是错误的 - 你正在取一个字符串,你应该在那里取一个(带符号?)小数。其次,您传递n
按值,但您应该将指针传递给n
:
fscanf (inFile, "%d", &n);
您也是#include
现已弃用的<stdio.h>
文件。你应该:
#include <cstdio>
最后,你声明编写C ++代码,但实际编写的代码肯定不是C ++ - ish,也就是说它是类型不安全的。我建议你去C ++,或者不要 - 不要四处游荡。
这是一种更多的C ++方式来做你想做的事情(你应该添加错误检查并写入输出文件):
#include <cstdio>
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream in("reiz.in", std::ios::in);
int n = 0;
in >> n;
return 0;
}
答案 5 :(得分:0)
有几个问题会阻止您的代码正常运行。
无需将outfile
作为r+
打开。您可以使用模式w
打开它。
outFile = fopen ("reiz.out","w");
当您使用fscanf
从文件中读取时,您将传递整数n
而不是指向整数n
的指针。 fscanf
期望接收位置以写入它读取的整数。你正在传递整数本身(在最好的情况下,这将使你的程序崩溃。最坏的情况是,奇怪的东西将开始发生)。
fscanf (inFile, "%s", &n);
在写入outfile时使用%n
。这不会打印整数n
,而是读取到目前为止写入的字节数。您想要使用%d
。
fprintf (outFile, "%d", m);
另外,作为旁注,您似乎使用的是C而不是C ++。在C ++中,通常使用文件流对象(如ifstream
和ofstream
)来读取和写入文件。您正在使用fopen
之类的东西,它们更像是C类。
此代码应该更好用:
#include <stdio.h>
int main() {
int n;
FILE * inFile;
FILE * outFile;
inFile = fopen ("reiz.in","r");
outFile = fopen ("reiz.out","w");
fscanf (inFile, "%d", &n);
int m = n * 2;
fprintf (outFile, "%d\n", m);
fclose (inFile);
fclose (outFile);
return 0;
}