Re: code critique please.
* matt:
this is my first program in this language ever (besides 'hello
world'), can i get a code critique, please? it's purpose is to read
through an input file character by character and tally the occurrence
of each input character. it seems to compile and run, so i'm looking
for the opinions of old-timers here plz.
/*
* File: occurrenceTally.cpp
* Author: matthew
*
* Created on July 9, 2008, 6:15 PM
*/
#include <stdlib.h>
#include <fstream.h>
This is not a standard header.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
As a newbie you really should use C++ iostreams instead of C low-level i/o.
int main(int argCount, char** argvArray) {
printf("filename ");
printf("%s",argvArray[1]);
printf("\n");
ifstream OpenFile(argvArray[1]);
Here you need to check whether the file open failed or succeeded.
char inputCharacter;
int characters[256];
int i;
Instead just declare "i" within the loop, like
for( int i = 1; ...
for (i = 1; i < 256; i++) {
characters[i]=0;
}
Consider
int characters[UCHAR_MAX+1] = {};
Or better, use a std::map.
while(!OpenFile.eof())
eof is only detected by reading past end of file. you need to check whether the
read operation succeeded or not.
{
OpenFile.get(inputCharacter);
//printf("%c",inputCharacter);
characters[int(inputCharacter)]++;
Casting char to int is completely unnecessary.
What you do need is instead a cast that get rids of possible negative value.
Use a C++ static_cast for that (and not to int, but to which type?).
}
OpenFile.close();
for (i = 32; i < 126; i++) {
Magic numbers are ungood. And are you sure you really want that restricted range?
char outputCharacter;
outputCharacter = char(i);
if ( characters[i]>0 ) {
printf("%c ", outputCharacter);
printf("%i\n", characters[i]);}
}
return (EXIT_SUCCESS);
}
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?