C++/Output file name in C++
Expert: Eddie - 8/5/2009
QuestionQUESTION: Hi,
I have wrtiting a c++ program below:
#include <fstream.h>
#include <iostream.h>
#include <stdio.h>
#include<conio.h>
//using namespace std;
int main()
{
char FirstName[30], LastName[30];
int Age;
char FileName[255];
char filename[30];
cout << "\nEnter the name of the file you want to create: ";
cin >> FileName;
int a=10,b=12,c=13;
sprintf(FileName, "%s,%i,%i,%i.txt", filename, a,b,c);
cout << "Enter First Name: ";
cin >> FirstName;
cout << "Enter Last Name: ";
cin >> LastName;
cout << "Enter Age: ";
cin >> Age;
ofstream Students(, ios::out);
Students << FirstName << "\n" << LastName << "\n" << Age;
cout << "\n\n";
return 0;
}
This program creates an output file with the name specified by the user form prompt e.g. test.txt. I am trying to print the values of variables a,b,c as part of the file name e.g. test12.13.14.txt.
Can you please help.
Many thanks
ANSWER: Hi Muzhe, thank you for the question.
I recommend using the std::ostringstream class over sprintf as it is object oriented, and much safer. It works just like cout. You need to include the header sstream to use it.
char filename[255];
int a = 10, b = 12, c = 13;
cout << "enter the file name"
cin.get(filename, 254);
std::ostringstream oss;
oss << filename << a << b << c;
std::string str = oss.str(); // Gets the string value
cout << str;
You can also place the dots in the ostringstream as you please to get the formatting you want.
oss << filename << "." << a << "." << b << "." << c;
And so on. That should have you pointing in the right direction.
I hope this information was helpful.
- Eddie
---------- FOLLOW-UP ----------
QUESTION: Hi,
Thanks for your answers. I got one more question can you plese tell me how to increment a number in fraction. For example i've one number a=.01 how do i increment this number with .01 for a number of times. All I want to run a loop which will the increment and print the numbers from .01 i.e. .01, .02, .03 and so on.
ANSWER: Hello Muzhe, thank you for the question.
You can accomplish this with the float data type just like you would an integer.
float a = 0.01f;
for(int i = 0; i < 10; i++)
{
a += 0.01f
cout << "The value is: " << a << std::endl;
}
This should accomplish what you want.
I hope this information was helpful.
- Eddie
---------- FOLLOW-UP ----------
QUESTION: Hi,
Can you please specify a method which will write data into files as above but in the Visual C++ 2005 environment. There are so many commands that doesnt work with VS 2005.
AnswerHello again Muzhe, thank you for the question.
I apologize for not responding sooner; I didn't have internet access for a couple of days.
The above code should compile and run as anticipated in VS2005, provided you take the .h off of the include file names.
#include <fstream>
#include <iostream>
#include <cstdio>
#include <conio>
Please let me know if this works for you.
I hope this information was helpful.
- Eddie