Как следующее утверждение производит пробелы? - PullRequest
0 голосов
/ 23 марта 2020

То, что пытается сделать моя «верхняя» программа - это делать буквы прописными. Он получает файл из командной строки как argv; затем читает его, потом делает его заглавными.

Пример: «Интересно, работает ли он» в файле example.txt. В командной строке:

C:\Users\...>upper example.txt 
I WONDER IF IT WORKS

Это был код, который я использовал первым:

int main (int argc, char *argv[]){
    FILE * fp;
    int ch;

    if ((fp = fopen (argv[1] , "r+")) == NULL) {
        fprintf (stderr , "Can not be opened.");
        exit(EXIT_FAILURE);
    } 

    while((ch = getc(fp)) != EOF){
        if (isalpha(ch))
            putchar(toupper(ch));
        else                       
            putchar(' ');
    }

    fclose(fp);
    return 0; 
}

Это работает, но я видел более краткую версию, которая не нуждается в выражении else.

while((ch = getc(fp)) != EOF){
    putchar(toupper(ch));
}

И это ставит пробелы между каждым словом тоже. Как это возможно?

1 Ответ

3 голосов
/ 23 марта 2020

Из документации

int toupper(int c);

Преобразует c в его заглавный эквивалент, если c является строчной буквой и имеет заглавный эквивалент. Если такое преобразование невозможно, возвращается значение c без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...