0

I want to open a file and count the number of strings in the first line.

Assuming that each string is delimited by spaces.

I tried to do some code but yet not successful, can anyone help?

int main(int argc, char* argv[])
{
	int count = 0;
	FILE *stream;
	char str[10];

	//open a file
	if( (stream  = fopen( "input.txt", "r" )) == NULL )
		printf( "The file 'input.txt' was not opened\n" );
	else
		printf( "The file 'input.txt' was opened\n" );

	//read the first line
	while( fscanf(stream, str) != '\n')
	{
		count++;	//count the number of strings in the line (strings delimited by space)
		cout << "\ncount: " << count;
	}
	
	return 0;
}
3
Contributors
19
Replies
20
Views
10 Years
Discussion Span
Last Post by iamthwee
0

This is most definitely wrong.

while( fscanf(stream, str) != '\n')

Look up fscanf in your Help/man pages.

I get the error.

But still I can´t do what I want...
It never exits the while loop...

int main(int argc, char* argv[])
{
	int count = 0;
	FILE *stream;

	//open a file
	if( (stream  = fopen( "input.txt", "r" )) == NULL )
		printf( "The file 'input.txt' was not opened\n" );
	else
		printf( "The file 'input.txt' was opened\n" );

	//read the first line
	while( fscanf(stream, "%s") != '\n')
	{
		count++;	//count the number of strings in the line (strings delimited by space)
		cout << "\ncount: " << count;
	}
	
	return 0;
}
0
while( fscanf(stream, "%s") != '\n')

Keep reading up on fscanf . You need another parameter, and you need to understand the return value. (Hint: check for success, not absence of one possible failure.)

0
#include <iostream>
#include <string>
#include <fstream> //file i/o
#include <sstream>

using namespace std;


int main()
{
    string array;
    
    ifstream in("input.txt");
    
    
    int count = 0;
    
    while (getline(in, array, '\n'))
    {
        cout << array; 
          //string token;
       istringstream iss(array);
       while ( getline(iss, array, ' ') )
       {
          count ++;
       }  
       cout<<" <Number of words: " <<count<<">"<<endl;
     count = 0; //reset count
    }
    
   
    in. close();
    cin.get();
}

Although if your words are delimitered by more than one space it doesn't work.

0

Are you doing this in c++, I noticed a cout there. If so there's a function getline to help you do this?

Yes I'm doing it in C++.

I've searched the getline function, but don´t know properly how to use it...

int main(int argc, char* argv[])
{
	int cnt = 0;
	FILE *stream;
	char* psch;

	//open a file
	if( (stream  = fopen( "input.txt", "r" )) == NULL )
		printf( "The file 'input.txt' was not opened\n" );
	else
		printf( "The file 'input.txt' was opened\n" );

	//read the first line
	istream& getline( psch, 80, delim = '\n' );

	
	return 0;
}
0

May I ask what compiler you're using.

By the way, your style so far is almost completely in c. You do realise that?

0
#include <iostream>
#include <string>
#include <fstream> //file i/o
#include <sstream>

using namespace std;


int main()
{
    string array;
    
    ifstream in("input.txt");
    
    
    int count = 0;
    
    while (getline(in, array, '\n'))
    {
        cout << array; 
          //string token;
       istringstream iss(array);
       while ( getline(iss, array, ' ') )
       {
          count ++;
       }  
       cout<<" <Number of words: " <<count<<">"<<endl;
     count = 0; //reset count
    }
    
   
    in. close();
    cin.get();
}

Although if your words are delimitered by more than one space it doesn't work.

Hi I run your program but it gives me 1 word when it shoul count 4....

0

May I ask what compiler you're using.

By the way, your style so far is almost completely in c. You do realise that?

I'm using Visual Studio 6.0. I'm more used to C than C++ :sad:

0

What does your sample text file look like?

Can you post it?

I've changed the ' ' by '\t' because I have the strings delimited by tabs

Thanks :)

0

I've changed the ' ' by '\t' because I have the strings delimited by tabs

Thanks :)

That's what I deduced.

So my code is not without bugs... It could probably be changed to handle multiple spaces and multiple tabs used as a delimiters, which is something you should aim for.

Your program will be more reliable then.

0

That's what I deduced.

So my code is not without bugs... It could probably be changed to handle multiple spaces and multiple tabs used as a delimiters, which is something you should aim for.

Your program will be more reliable then.

You're right!

How can we do that?

0

You're right!

How can we do that?

You know what I can't think of an easy way to do that, but I'm sure it's possible. :lol:

0

You know what I can't think of an easy way to do that, but I'm sure it's possible. :lol:

:) I can't think of an easy way or difficult way :sad:

0

I believe this should work with multiple tabs or spaces...

Try it and confirm please:

#include <iostream>
#include <string>
#include <fstream> //file i/o
#include <sstream>

using namespace std;


int main()
{
    string array;
    
    ifstream in("input.txt");
    
    
    
    int count = 0;
    while (getline(in, array, '\n'))
    {
        stringstream os(array);          
        string temp;                 //a temporary string
  
  
        cout << array;
        while (os >> temp)
       {               
         //std::cout <<temp <<std::endl;
         count++;   
       }  
        
        
        
       cout<<" <Number of words in this line: " <<count<<">"<<endl;
     count = 0; //reset count
    }
    
   
    in. close();
    cin.get();
}
0

I tried with this line in the file: "12 324 34 32"

And the result was 12, when it should be 4.

0

Sorry my tabs and spaces disappeared, I tried with this line:

12[1 space]324[2 tabs]34[8 spaces]32

And it outputs 12 when it should be 4

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.