Количество букв в верхнем регистре, количество букв в нижнем регистре, количество пробелов и преобразование нижнего в верхний - PullRequest
0 голосов
/ 26 января 2012

Я немного новичок в языке (C), но я пытаюсь сделать это довольно просто. я уверен, что я просто пренебрегаю чем-то или сталкиваюсь с некоторыми логическими ошибками.

Как следует из заголовка, все, что я хочу, чтобы моя программа, - это количество строчных букв, заглавных букв и пробелов В качестве дополнительной функции он также преобразует строчные буквы, введенные в верхний регистр.

#include <stdio.h>

int main(void){

    int iochar, numdigits=0, numlower=0, numupper=0, numwhites=0;

    printf("Please enter a phrase:\n\n");

    while((iochar=getchar())!=EOF) {
        if ((iochar=' ')||(iochar='\t')||(iochar='\n')){
            numwhites++;
            putchar(iochar);
        }
        else if((iochar>='0')&&(iochar<='9')) {
         numdigits++;
         putchar(iochar);
        }
        else if(('a'<=iochar)&&(iochar<='z')) {
            numlower++;
            putchar(iochar-32);
        } 
        else if(('A'<=iochar)&&(iochar<='Z')) {
            numupper++;
            putchar(iochar);
        }
        else 
           putchar(iochar); 
    }

    printf("%d white characters, %d digits, ",numwhites,numdigits);
    printf("%d lowercase have been converted to ",numlower);
    printf("uppercase and %d uppercase.\n",numupper);

    printf("\n\n");

    return 0;
}

Ответы [ 3 ]

3 голосов
/ 26 января 2012
if ((iochar=' ')||(iochar='\t')||(iochar='\n'))

в этом случае вы назначаете iochar и всегда будете верны. Это должно быть сравнение:

if ((iochar==' ')||(iochar=='\t')||(iochar=='\n'))
0 голосов
/ 26 января 2012

Я думаю, что Сани Хуттенен решил ваш вопрос довольно хорошо.Я также рекомендовал бы вам позвонить

putchar(iochar)

только один раз в конце вашего bucle ... Это было бы яснее.

0 голосов
/ 26 января 2012

Пожалуйста, посмотрите на isupper(int c), islower(int c) и isspace(int c), которые определены в ctype.h. Возможно, вы также можете воспользоваться toupper(int c) и tolower(int c), которые определены в том же файле.

Также обратите внимание на ответ Сани, сравнение в C равно ==, а присваивание - =. Кроме того, можно назначать в операторах if, что делает возможными и даже распространенные ошибки, такие как ваша. На мой взгляд, хорошее соглашение - писать сравнения следующим образом:

if ('\n' == iochar)

Таким образом, если бы я сделал опечатку и написал вместо этого:

if ('\n' = iochar)

Я получаю синтаксическую ошибку во время компиляции, а не странное поведение во время выполнения.

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