在输出到文件之前从用户输入
C++ Input from user before Output to file
我有这段代码,应该在将随机数写入文件之前从用户获取最小值和最大值,但它写入文件并跳过等待用户输入。如何在写入文件之前等待并获取用户的输入,并使用用户的输入来写入文件。
解决方案:它工作,除了我运行了以下命令:g++ randomNumbers.cpp
,并期望程序立即运行,但我忘记通过运行输出文件手动运行它。
#include <iostream>
#include <fstream>
#include <string>
const bool CREATE_FILE = true;
void getMinMax(int&,int&);
void writeFile(std::ofstream&, int&, int&);
int main(){
if (CREATE_FILE){
int min;
int max;
std::ofstream outfile;
getMinMax(min, max);
writeFile(outfile, min, max);
}
}
void getMinMax(int& min,int& max){
std::cout << "Enter min: ";
std::cin >> min;
std::cout << "Enter max: ";
std::cin >> max;
}
void writeFile(std::ofstream& file, int& min, int& max){
file.open("numbers.txt", std::fstream::out);
for (int i = 1; i <= 10; i++){
file << min + (rand() % (int)(max - min + 1));
}
file.close();
}
我觉得这个程序没有任何问题。它使用Visual Studio 2015 Express完成了预期的工作。我看到的唯一错误是:
file << min + (rand() % (int)(max - min + 1));
这将数字一个接一个地附加到文件中,没有任何分隔空格。对我来说,结果是文本文件包含:
208131917161201920
我将把这一行替换为:
file << min + (rand() % (max - min + 1)) << ' ';
本身,我不明白为什么这段代码不能在你的机器上运行。尝试使用不同的编译器或在你的终端上声明程序的显式结果(例如,是否创建了"numbers.txt",如果是,如果有的话,里面是什么?)。如果这只是一个较大文件的一个段,那么std::cin
可能会从输入缓冲区读取剩余的垃圾。在请求用户输入之前,尝试将此添加到getMinMax
的主体中:
std::cin.ignore(MAX_INT);
std::cin.clear();
这不是相关的,但在c++中,没有必要在函数结束时手动关闭文件。当std::fstream
超出作用域时,它的析构函数将自动关闭文件。此外,如果你的函数不打算改变整型数,可以按值传递而不是按引用传递。从你的代码风格来看,我猜你已经习惯了用C编程,并试图做出改变;它有助于尽早开始编写习惯的c++代码
编辑:尝试重写getMinMax
方法为:
#include <sstream>
void getMinMax(int& Min, int& Max)
{
using namespace std;
cin.ignore(MAX_INT);
cin.clear();
string temp;
cout << "Enter min: "
getline(cin, temp);
stringstream(temp) >> Min;
cout << "Enter max: "
getline(cin, temp);
stringstream(temp) >> Max;
//printf("(Min, Max) = (%i, %i)n", Min, Max); //For debugging
}
这是你发布的内容的一个冗长但更安全的版本。如果这行不通,那我不知道该怎么跟你说。如果它确实工作,那么我的猜测是输入流被污染了。
我建议如下:
- 修复缺失的包括:即添加
include <stdlib.h>
到你的文件。 - 打开一个终端,导航到你的randomNrs.cpp文件所在的目录(或者你给它起的任何名字)
- 编译它:你说你正在使用g++,所以你只要在该目录下运行
g++ randomNrs.cpp -o randomNrs
--o
标志将允许你将二进制文件命名为默认的a.out
以外的东西。在本例中,将其命名为randomNrs
。 - 运行它:然后通过输入
./randomNrs
从该目录中运行可执行文件
这些是我为了运行你的程序所经历的步骤。我用的是RHEL,但我想在OS X上应该是一样的
- C++如何通过用户输入删除列表元素
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 打印时有二叉树问题.用户输入不打印任何内容
- C ++奇怪的数组由用户输入
- 如何允许大写和小写用户输入?
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 如何使用用户输入变量制作二维数组?
- 用户输入字符串的文件附加问题..C++
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?