- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 C++ 入门课的作业,我很困惑为什么我的 getline 似乎可以工作,但它没有将我的函数输出到 outfile.txt
中。我的老师说我的 getline 语法不正确,但我对如何操作感到困惑。我的 infile.txt
内容如下:
T & 4
S @ 6
T x 5
R * 5 7
D $ 7
D + 5
R = 4 3
E
还有我的代码:
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
void draw_rect (char out_char, int rows, int columns); // Draws a rectangle shape
void draw_square (char out_char, int rows); //Draws a square shape
void draw_triangle (char out_char, int rows);// Draws a triangle shape
void draw_diamond (char out_char, int rows); // Draws a diamond shape
int main()
{
ofstream outfile;
ifstream infile;
int row, col;
bool exit = false;
char value;
infile.open("infile.txt");
outfile.open("outfile.txt");
if(!infile.good())
{
cout << "failed to open\n";
}else
{
string buffer;
while(!infile.eof() || !exit)
{
getline(infile, buffer);
switch(buffer[0])
{
case 'R':
value = buffer[2];
row = buffer[4];
col = buffer[6];
draw_rect(value, row, col);
break;
case 'T':
value = buffer[2];
row = buffer [4];
draw_triangle(value, row);
break;
case 'D':
value = buffer[2];
row = buffer[4];
draw_diamond(value, row);
break;
case 'S':
value = buffer[2];
row = buffer[4];
draw_square(value, row);
break;
case 'E':
cout << "Files Written.\nExiting." << endl;
exit = true;
break;
default:
cout << "Invalid input, try again" << endl;
}
}
}
return 0;
}
void draw_diamond (char out_char, int rows)
{
ofstream outfile;
int space = 1;
space = rows - 1;
for (int i = 1; i <= rows; i++)
{
for (int k = 1; k <= space; k++)
{
outfile << " ";
}
space--;
for( int k = 1; k <= 2*i-1; k++)
{
outfile << out_char;
}
outfile << endl;
}
space = 1;
for (int i = 1; i <= rows; i++)
{
for(int k = 1; k <= space; k++)
{
outfile << " ";
}
space++;
for(int k = 1; k <= 2*(rows-i)-1; k++)
{
outfile << out_char;
}
outfile << endl;
}
}
void draw_triangle (char out_char, int rows)
{
ofstream outfile;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j <= i; j++)
{
outfile << out_char;
}
outfile << endl;
}
}
void draw_square (char out_char, int rows)
{
ofstream outfile;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < rows; j++)
{
outfile << out_char;
}
outfile << endl;
}
}
void draw_rect (char out_char, int rows, int columns)
{
ofstream outfile;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
outfile << out_char;
}
outfile << endl;
}
}
最佳答案
以您的一个函数为例:
void draw_rect (char out_char, int rows, int columns)
{
ofstream outfile;
这会在您的 draw_rect()
函数中声明一个新的 std::ofstream
对象。 draw_rect()
不会打开此 std::ofstream
对象,因此此 draw_rect
() 尝试将任何内容写入此 outfile
什么都不做。
您在 main()
中创建了一个具有相同名称的 std::ofstream
对象这一事实,您确实打开了,这绝对没有任何意义。仅仅因为您在不同的函数中拥有同名的同一个对象并不意味着它们是同一个对象。 C++ 不是这样工作的。
您需要更改 main()
函数以通过引用将其 outfile
作为参数传递给每个函数,而不是声明另一个具有相同名称的对象在每个函数中。上面的函数是,例如:
void draw_rect (ofstream &outfile, char out_char, int rows, int columns)
{
您将需要更改每个函数以通过引用接收 outfile
参数,像这样,更改它们的前向声明,并显式传递 outfile
作为第一个来自 main()
的参数,在每个函数调用中。
最后,关于您声称您的老师告诉您您对 getline
的使用有问题:
您的困惑是完全合理的。如果您的“getline 语法不正确”,那么您将遇到编译失败。由于您的问题没有提到任何编译错误,即使在调查和确定实际问题之前,也可以合理地得出结论:1) getline 语法正确,2) 程序已编译,以及 3) 您需要找到更好的老师,如果您的意图是真正学习 C++,而不受不良导师的阻碍。
从各方面来看,您的问题与 getline 无关。您的老师简直无能,对 C++ 的了解也不多。当然,这不是你的错,但你需要明白这一点。
附言:
while(!infile.eof() || !exit)
This is a small bug .在这种情况下,错误是隐藏的,因为最终 exit
正确地设置了您的示例输入,但您应该在阅读并理解此链接中给出的解释后修复此问题。
关于C++问题读取输入文件并使用getline()输出到输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192703/
main = do input [f a] -> f [a] sequenceA [] = pure [] sequenceA (x:xs) = (:) x sequenceA xs 很
while(getline()) 和 while(!getline().eof()) 有什么区别? 正在解析输入字符串。我尝试了两种条件检查,结果有所不同。 std::string testStr =
我知道我知道。以前有人问过这个问题,但我查看了所有答案,但似乎没有一个能解决我的问题。当我使用 getline 函数获取文件中一行的内容时,它不起作用。 getline(file, line); '文
使用 getline() 函数时出现以下错误: 没有重载函数“getline”的实例匹配参数列表 在一个名为“Time”的类中,我在读取以下输入时使用它: istream & operator >>
我正在阅读 C++ 入门书并尝试所有代码示例。我对这个很感兴趣: #include #include using std::string; using std::cin; using std::c
#include #include #include using namespace std; int main() { char d,a[9],e[9]; cin.getline(a,9); c
假设我想从控制台读取一个整数,并且我不希望程序在输入非整数字符时中断。这就是我的做法: #include #include #include using namespace std; int m
这可能不是一个错误,但我不知道出了什么问题。我的第一个条目在第二次迭代中对 str1 重复,并且从那时起也是如此。只有第一次迭代顺利。 #include #include using namesp
string text; getline(text.c_str(),256); 1) 我收到错误消息“错误:没有匹配函数来调用‘getline(const char*, int)”上面有什么问题,因为
哪个更好,更受欢迎?我真的发现阅读 API 令人困惑。 最佳答案 成员(member)版读入char*,免费版读入std::string。所以更喜欢免费版!像这样使用它: std::istream &
我正在尝试解决这个问题,但出于某种原因,我一直收到这个问题: no instance of "getline" matches the argument list. 我查过这个问题,很多次是因为人们使
长话短说 使用 libc++ 版本的 getline 函数的程序在从管道读取输入时会阻塞,直到管道的缓冲区已满。 NOT libstdc++ 版本的 getline 函数也是如此:这里函数立即读取并返
我的程序的一部分: #include #include #include #include #include using namespace std; /* Works for istrin
我是一名正在准备期末考试的 C++ 初学者。我用两种方式写了一个程序。第一个代码使用 cin.getline() 并且不能正常工作。第二个代码使用 cin.get() 和 cin >> 并正确执行所有
我正在尝试使用 getline 解析文档以获取整行并将其放入名为“line”的字符串变量中。问题是我收到一条错误消息:“没有重载函数 getline 的实例与参数列表匹配。”谁能帮我解决这个问题? #
我有一个带有 getline 函数的源代码文件,当我编译它时收到错误(下面的代码和错误)。我的问题是我从一个已经编译和工作的程序(也包括在下面)中复制并粘贴了整个函数。我在程序的其他 2 个源代码文件
我正在尝试从文件中读取,但 C++ 不想运行 getline()。 我收到这个错误: C:\main.cpp:18: error: no matching function for call to '
例子: std::ifstream in("some_file.txt"); std::string line; // must be outside ? while(getline(in,line)
注意:已解决,问题不是 getline() 而是 find 函数数组填充不当! 在发布我自己的问题之前,我已经查找了几个问题,但找不到我的问题的答案。这是我发布的第一个问题,但在发布我自己的问题之前,
我的代码块中有一个 getline 函数。但是在编译 make 文件时出现以下错误: cc -DMAIN -c -o terp.o terp.c terp.c:130:15: error: con
我是一名优秀的程序员,十分优秀!