Tôi có bài tập về nhà C++. Bài tập về nhà đang yêu cầu chuyển đổi một chương trình c thành C++. Dưới đây là câu hỏi:cần trợ giúp chuyển đổi c thành C++ (lỗi đơn giản nhưng không thể sửa)
Bạn được yêu cầu để chuyển đổi chức năng C sau vào một hàm C++ và sau đó nhúng nó vào một chương trình hoàn chỉnh và thử nghiệm nó. Lưu ý rằng hàm này sao chép tệp nhị phân của số nguyên chứ không phải tệp văn bản . Chương trình phải chấp nhận các đối số (tệp cần sao chép và tệp được sao chép vào) từ dòng lệnh.
/* ==================== cpyFile =====================
This function copies the contents of a binary file
of integers to a second file.
Pre fp1 is file pointer to open read file
fp2 is file pointer to open write file
Post file copied
Return 1 is successful or zero if error
*/
int cpyFile (FILE *fp1, FILE *fp2)
{
/* Local Definitions */
int data;
/* Statements */
fseek (fp1, 0, SEEK_END);
if (!ftell (fp1))
{
printf ("\n\acpyFile Error : file empty\n\n");
return 0;
} /* if open error */
if (fseek (fp1, 0, SEEK_SET))
return 0;
if (fseek (fp2, 0, SEEK_SET))
return 0;
while (fread (&data, sizeof (int), 1, fp1))
fwrite (&data, sizeof (int), 1, fp2);
return 1;
} /* cpyFile */
tôi đã làm hết sức mình và cố gắng chuyển đổi nó, nhưng tiếc là khi tôi đang sử dụng nó, các tập tin mà tôi nhận được sau khi copy trống. Dưới đây là câu trả lời của tôi:
#include <fstream>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
if(argc!=3)
{cerr<<"invalid number of arguments. must be 3."<<endl;exit(1);}
fstream fp1(argv[1],ios::in);
if(!fp1)+{cerr<<argv[1]<<" could not be opened"<<endl;exit(1);}
fstream fp2(argv[2],ios::out);
if(!fp2)+{cerr<<"file could not be found."<<endl;exit(1);}
int data;
fp1.seekg (0,ios::end);
if (!fp1.tellg())
{
cout<<"\n\acpyFile Error : file empty\n\n";
return 0;
} /* if open error */
if (fp1.seekg (0, ios::beg))
return 0;
if (fp2.seekg (0, ios::beg))
return 0;
while (fp1.read (reinterpret_cast<char*>(&data), sizeof (int)))
{
fp2.seekp(0);
fp2.write (reinterpret_cast<char*>(&data), sizeof (int));
}
return 1;
}
Tôi đã làm hết sức mình và mọi thứ hoạt động tốt, ngoại trừ khi tôi sao chép tệp nhị phân, tệp tôi nhận được trống và tôi không biết tại sao.
Một nỗ lực tốt, tôi khen bạn đã cho nó một phong nha đi thay vì cảm ơn chỉ đơn giản là yêu cầu người khác làm điều đó cho bạn. – dreamlax
Đừng làm điều này trên bài tập về nhà của bạn, nhưng để tham khảo trong tương lai: 'std :: ofstream (argv [2]) << std :: ifstream (argv [1]); ' –
Tại sao bạn có' fp2.seekp (0) '* trong * vòng lặp? – celtschk