【问题标题】:How to convert C functions to C++? [closed]如何将 C 函数转换为 C++? [关闭]
【发布时间】:2020-08-26 00:11:33
【问题描述】:

我有一个问题,因为这是我第一次遇到一些需要转换成 C++ 的 C 函数。

代码:

FILE *pokf;
char name[10],gender;
int age, i, n, b1=0, b2=0;
float p;

pokf=fopen("Data.txt","r");       
while (feof(pokf)==0) {
fscanf (pokf,"%s %c %d %f", &name, &gender, &age, &p);
if (gender=='Z') b1++;
if (p>=4.50 ) b2++;  }
fclose(pokf);

我会写:

ifstream input;
input.open("Data.txt");

但是我不知道用什么来代替 pokf 因为我不能再使用 FILE *pokf 了。 用什么来代替函数feof和fscanf?

【问题讨论】:

  • 我建议投资a couple of good books。他们应该拥有您需要的所有信息(以及更多信息)。
  • C 代码质量低劣,由不知道自己在做什么的人编写。
  • 不清楚你在这里真正想要什么。标题问题非常广泛,但您似乎实际上想要更具体的东西。但是,如果只是关于如何使用 C++ 流类的问题,那么我相信通过在网络上查找有关该主题的众多教程之一,甚至阅读类的文档,您会得到更好的服务。

标签: c++ c file


【解决方案1】:

fscanf 的大致等价物是operator>>,我不会担心feof,因为它使用不正确。所以

while (feof(pokf)==0) {
    fscanf (pokf,"%s %c %d %f", &name, &gender, &age, &p);
    ...

变成

while (pokf >> name >> gender >> age >> p) {
    ...

虽然在 C++ 中使用char name[10] 会起作用,但它有一个明显的问题,即您只能使用少于 9 个字符的名称。在 C++ 中,您应该使用 std::string 而不是 char 数组。

【讨论】:

  • 我收到一个错误:[错误] 'FILE* {aka _iobuf*}' 和 'char' 类型的无效操作数到二进制 'operator>>'
  • @zastacka2345 我假设您已将pokf 更改为ifstream(就像您在问题中所说的那样)。
  • 它正在工作。问题解决了。谢谢!
【解决方案2】:

您应该能够在 c++ 中使用 FILE *pokf,这是一个示例 http://www.cplusplus.com/reference/cstdio/feof/,您可以在其中看到如何在 c++ 中打开文件

// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  string line;
  ifstream myfile ("example.txt");
  if (myfile.is_open())
  {
    while ( getline (myfile,line) )
    {
      cout << line << '\n';
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}

【讨论】:

  • 是的,但我应该使用 C++ 语法。
  • IMO 是 c++ 语法以及 C 但如果你必须使用 ifstream 你可以做这样的事情来读取文件(我编辑了我的答案,所以你可以看到它的格式)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
相关资源
最近更新 更多