【问题标题】:Intro to c++ and I'm swampedC++ 简介,我被淹没了
【发布时间】:2018-10-05 06:49:46
【问题描述】:

我周一刚开始介绍 C++ 课程,感觉完全超出了我的深度。首先,他们告诉我安装 Crimson 编辑器和 Cygwin(编译文件):

Crimson 编辑器不允许我做任何事情(所有选项似乎完全变灰)。

Cygwin 的相似之处在于我可以从批处理文件中打开命令提示符(按照提供给班级的教程文件的指示),但我无法从那里做任何事情。我已经请求帮助但尚未收到回复,所以我决定看看我是否可以在网上找到帮助。

在遇到这些问题后,有人建议我使用其他人在线提供的代码块,我的代码块一直运行良好。我遇到的第一个问题是,在编译/调试文件时,代码块是否会成为一个问题(他们已经声明,对于每个分配,每个提交都应该包含一个 makefile、一个 makedebug,并将根据以下标准进行标记:

评分方案

您将根据以下标准进行评分:

程序编译没有错误 20%
程序执行正确 20%
C++ 程序正确性和风格 20%
程序文档 20%
测试计划 20%
总计 100%

不幸的是,他们还没有向我们介绍很多这些概念(我希望他们在我即将结束第一部分时尽快介绍它们(他们说过我们应该能够完成第一个任务,即编写 4 个程序))。

这将我们带到下一个问题。我正在尝试使用while(getline()) 进行练习,但遇到了一些问题(同样,我对编程语言的经验几乎为零,并决定参加这门课程,因为它应该是一门入门课程。有趣的是,“虽然”是稍后将在课程中介绍的概念,但幸运的是,我从在线视频中对此有了非常基本的了解)。以下是我尝试运行的代码:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{

    string docName;
    cout<<"What is the file name you would like to open?"<<endl;
    cin>> docName;

    string s, line;
    ifstream in (string docName);

    while (getline(in, line))
        s+=line+"\n";
    cout << s;

    return 0;
}

这里有一个错误,我不确定为什么会收到这个错误。此外,我在完全理解与此类似的代码的 3 个方面时遇到了一些问题:

getline()

ifstream in()

and ofstream out()

作为对字符串的介绍,他们使用了代码:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    ifstream in("Scopy.cpp");
    ofstream out("Scopy2.cpp");
    string s;
    while(getline(in, s))
        out<<s<<"\n";
    return 0;
}

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    ifstream in("FillString.cpp");
    string s, line;
    while(getline(in,line))
        s+= line + "\n";
    cout<< s;
}

正如您可能理解的那样,我对这一切有点不知所措。我即将结束第一部分,他们说我们应该能够完成作业:

编写一个程序来打开一个文件并计算该文件中由空格分隔的单词。

编写一个程序,打开一个(文本)文件,并一次一行地显示该文件的内容。显示一行后,程序应等待用户按下该键,然后再显示文件中的下一行。

编写一个程序,使用两个嵌套的 for 循环和取模运算符 (%) 来检测和打印从 1 到 10,000 的素数。 (素数是自然数,不能被除自身和一以外的任何其他数整除)。显示所有找到的素数。

编写一个程序,创建一个包含 100 个字符串对象的数组。通过让您的程序打开一个(文本)文件并将文件的一行读入每个字符串来填充数组,直到您填充了数组。使用“line #:”格式显示数组,其中 # 是实际的行号(您可以使用数组计数器来获取该值)并且是存储的字符串。

有人可以用外行的话来解释这些吗? (我实际上一直在关注 NewBoston 的 C++ 教程,这非常有帮助,但我期待着这些教程的介绍,虽然我在教程 20 上,这就像他近 10 小时的介绍视频中的 3 小时一样,这些介绍在第 68 节教程......还有一段时间)。

【问题讨论】:

  • 理想情况下,请以一次询问一件事为目标。我们在这里有一个“过于宽泛”的密切原因,读者可能会投票支持该保留状态,因为如果将问题缩小一点,该问题将更容易回答或对其他读者更有用。

标签: cygwin codeblocks ifstream getline ofstream


【解决方案1】:

第一个建议:我的印象是你的老师正在从中汲取灵感和一些代码

Thinking in C++, 2nd Edition, Volume 1 by Bruce Eckel

可从这里获得:

https://www.mindviewllc.com/quicklinks/
https://archive.org/details/TICPP2ndEdVolOne

我建议你阅读它;我觉得解释C++的概念很好

第二个建议:Cygwin 带有一个Cygwin Terminal 图标。使用它来启动 bash 命令解释器。一定要安装gcc-g++ 包来编译代码。

编译器的错误信息告诉你它不匹配 getline 的参数:

$ g++ prova0.cpp -o prova0
prova0.cpp: In function ‘int main()’:
prova0.cpp:17:30: error: no matching function for call to ‘getline(std::ifstream (&)(std::string), std::string&)’
     while (getline (in, line ) )
                              ^

代码中的问题在这里

 ifstream in (string docName);

您在哪里定义流in
与其他代码比较

ifstream in("Scopy.cpp");

有一个词string太多了。

【讨论】:

  • 感谢您的回答。首先,对多个问题感到抱歉(我没有意识到一个帖子中可以提出的问题数量有一个规则)。其次,这与家庭作业无关(尽管我需要在作业中使用这些概念),所以如果我似乎在寻找答案,我深表歉意。关于您的第一个建议,是的,我们正在使用 Eckel 的书,但是我在开始时遇到了困难(因此提出了问题)。
  • 关于您的其他建议,我将尝试在Cygwin 明天以及删除字符串。最后,您似乎对材料很了解,您还有其他书籍可以推荐吗?我也在阅读加速 C++,但我觉得这些书中的许多都假设你对 C 有核心的理解,因此对于像我这样没有经验的人来说很难掌握它们。无论如何,再次感谢。非常感谢。
  • Bash 是一个命令解释器。它是 Unix/Linux 下最常用的一种,通常是默认的。作为 Cygwin,它是 Windows 的 Unix 环境,任何 bash 教程都可以。单一问题的原因是在提问之前,您可以检查过去是否有人已经问过类似的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
相关资源
最近更新 更多