-1

sorry for the remedial question. Been troubleshooting to try and find the error and I have come up empty.

I need to write a program that alphabetizes a list of inputs. The first input is the integer value of the number of inputs. Each input ends with a new line character.

int main()
{
    int word_total;
    char word_in[100][30], t[30];
    int i, j;

    printf("\nPlease the number of words you wish to sort: \n");
    scanf("%d", &word_total);

    printf("\nPlease enter a single word at a time. After each word, press return.\n");

    for (i = 0; i < (word_total); i++)
    {
        scanf("%s\n", word_in[i]);
    }

    for (i = 1; i < (word_total); i++) 
    {   
        for (j = 1; j < (word_total); j++) 
        {   
            if (strcmp(word_in[j - 1], word_in[j]) > 0) 
            {   
                strcpy(t, word_in[j - 1]);
                strcpy(word_in[j - 1], word_in[j]);
                strcpy(word_in[j], t);  
            }
        }
    }

    printf("\nSorted list:\n");
    for (i = 0; i < (word_total); i++)
    {
        printf("%s\n", word_in[i]);
    }
    printf("\n");
}

The problem: the input of words takes word_total + 1. For instance, if word_total = 5, I have to input 6 words. The last word that is input is ignored and not included in the "Sorted list". I can fix the problem by:

for (i = 0; i < (word_total - 1); i++)
    {
        scanf("%s\n", word_in[i]);
    }

but then the "Sorted list" is short one word. I've tried changing "<" to "<=", etc, but haven't found a fix.

Thank you for your help!

atrayitti
  • 1
  • 2

1 Answers1

2

The problem seems to be

scanf("%s\n", word_in[i]);

which, due to the "\n", will attempt to read more whitespace following the string (until it finds another non-whitespace; note that any whitespace character actually means any number of whitespace characters; the \n does not match just a single newline as you apparently expect). You should remove the "\n" from the scanf format and eat the newline with a getchar() or similar.

PS: not testing the return value from scanf() is asking for trouble.

Jens
  • 69,818
  • 15
  • 125
  • 179