Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C program not printing what I'd expect

Tags:

c

So I decided to learn C and using learn c the hard way. At any rate I tried editing one of the examples and the output isn't what I expected it would be. I call the program from the command line as e14 asd which "should" print: 'e' == 101 'a' == 97 's' == 115 'd' == 100

But, it doesn't print the 'd' line at all. The code I have is:

#include <stdio.h>
#include <ctype.h>

void print_letters(int argc, char *arg[])
{
    int i = 0;
    int j = 0;
    for(j = 0; j < argc; j++) {
        for(i = 0; arg[i] != '\0'; i++) {

            char ch = arg[j][i];
            printf("j is %d and i is %d\n", j, i);

            if(isalpha(ch) || isblank(ch)) {
                printf("'%c' == %d \n", ch, ch);
            }
        }
        printf("\n");
    }
}


int main(int argc, char *argv[])
{
    print_letters(argc, argv);
    return 0;
}

I'm assuming the problem has to do with the argv part but after looking around, I still have no idea what exactly is causing the 'd' not appear.

If someone could explain it to me it's be appreciated.

Thanks!

like image 378
Jason White Avatar asked Jan 25 '26 04:01

Jason White


1 Answers

for(i = 0; arg[i] != '\0'; i++) {

should be

for(i = 0; arg[j][i] != '\0'; i++) {
//            ^^^

The loop exit condition should be iterating through the characters of a single command line argument but is actually iterating over the arguments.

like image 72
simonc Avatar answered Jan 26 '26 17:01

simonc