c++读取命令行输入
时间: 2023-11-24 14:45:40 浏览: 35
c语言中可以通过使用std::getline和linux库函数readline来读取终端命令行输入。其中,std::getline适用于大部分场景,不会忽略空格和制表符,而readline则需要先检查系统是否安装了readline库,如果没有需要进行安装。readline()函数会在屏幕上输出一个字符串,然后读取一行输入并返回一个指向输入字符串的指针,使用完之后需要手动释放内存。在编译时需要链接readline库,如果是使用命令行编译,需要将-lreadline写在编译命令行的最后。
相关问题
c++读取wrl文件并显示
要读取和显示wrl文件,你需要使用一个3D图形库,例如OpenGL或者OpenSceneGraph。以下是使用OpenGL的简单示例代码:
```c++
#include <GL/glut.h>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
vector<float> vertices;
vector<int> indices;
void loadWrlFile(const char* filename) {
ifstream inFile(filename);
if (!inFile) {
cout << "Unable to open file " << filename << endl;
exit(1);
}
string line;
while (getline(inFile, line)) {
if (line.find("point") != string::npos) {
getline(inFile, line);
while (line.find("]") == string::npos) {
float x, y, z;
sscanf(line.c_str(), "%f %f %f", &x, &y, &z);
vertices.push_back(x);
vertices.push_back(y);
vertices.push_back(z);
getline(inFile, line);
}
}
if (line.find("coordIndex") != string::npos) {
getline(inFile, line);
while (line.find("]") == string::npos) {
int i1, i2, i3;
sscanf(line.c_str(), "%d,%d,%d,-1", &i1, &i2, &i3);
indices.push_back(i1);
indices.push_back(i2);
indices.push_back(i3);
getline(inFile, line);
}
}
}
}
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, &vertices[0]);
glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, &indices[0]);
glDisableClientState(GL_VERTEX_ARRAY);
glutSwapBuffers();
}
void reshape(int w, int h) {
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 1.0, 100.0);
}
int main(int argc, char** argv) {
if (argc != 2) {
cout << "Usage: " << argv[0] << " filename.wrl" << endl;
exit(1);
}
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow("WRL Viewer");
loadWrlFile(argv[1]);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
```
这个程序使用glut库创建了一个窗口,并使用OpenGL进行3D渲染。loadWrlFile函数读取wrl文件中的点和三角形索引,并将它们存储在vertices和indices数组中。display函数使用glVertexPointer和glDrawElements函数绘制三角形网格。reshape函数用于调整窗口大小。
要编译这个程序,你需要在命令行中输入以下命令:
```
g++ -o viewer viewer.cpp -lglut -lGLU -lGL
```
其中viewer.cpp是你的代码文件名,-lglut、-lGLU和-lGL是OpenGL库的链接选项。然后运行程序:
```
./viewer filename.wrl
```
其中filename.wrl是你要查看的wrl文件名。
c++输入输出流重定向
对于C语言中的输入输出流重定向,可以使用“>”和“<”符号来实现。例如,将程序的输出保存到一个文本文件中,可以通过在命令行中输入"./a.out > output.txt"来完成,其中“a.out”是待执行的程序的名称,">"表示将标准输出重定向到一个文件中,"output.txt"是指输出数据将保存到名为“output.txt”的文本文件中。类似地,可以使用"<"符号将标准输入重定向到一个文件中,例如"./a.out < input.txt"将程序从“input.txt”文件中读取输入数据。