2017-02-05 2 views
-1

Я пытаюсь получить мою программу распечатывается:программы C добавить отдельные цифры, ниже и заглавные буквы и другие символы

  • подсчитывать каждую отдельную цифру (0-9)
  • подсчитывать каждый индивидуальный алфавит буква (AZ и AZ)
  • общее количество любого другого вида характера

выходной сигнал должен быть значения, сохраненные в (10 + 26 + 26 + 1 =) 63 счетчиков вопрос: Countколичество различных индивидуальных английских алфавитов (как в нижнем, так и в верхнем регистре). Также подсчитайте общее количество символов.

Мой профессор действительно не был полезен, как и моя TA, поскольку они никогда в нее не попадали; они просто предположили, что мы знали C с места в карьер и не отвечали на электронные письма. Жаль всем другим, поскольку я новичок на этом сайте и пытаюсь учиться. Спасибо за ваше терпение.

#include<stdio.h> 
    #define MAXLINE 1000 
    main() 
    { 
    char str [MAXLINE]; 
    int ndigit, nlower, nupper, nother; 
    int c; 
    printf("Enter any text with numbers or other characters if you like: "); 
    fgets(str,MAXLINE,stdin); 
    ndigit = nlower = nupper = nother = 0; 

    while ((c = getchar()) != EOF) 
    { 
      if (c >= '0' && c <= '9') 
        ++ndigit; 
      else if (c >= 'a' && c <= 'a') 
        ++nlower; 
      else if (c >= 'A' && c <= 'A') 
        ++nupper; 
      else 
        ++nother; 
    } 
      printf("Digits : %d Lowercase Letters %d Uppercase Letters %d Other characters %d\n", ndigit, nlower, nupper, nother); 
    } 
} 
+3

Простая опечатка в противном случае, если. измените второй 'a' на 'z' и второй 'A' на 'Z' – Marichyasana

+1

Что на самом деле вопрос? – Jounathaen

+0

Вы суммируете все буквы верхнего регистра в один счет; вам нужно будет пересчитать каждую букву отдельно. Существуют различные способы сделать это, с различными последствиями для распечатки счетчиков в конце. –

ответ

1

Я попытался запустить вашу программу, в вашей программе есть 2 ошибки.

  1. Независимо от строки, которые вы вводите вход, все становится хранятся в str из-за линией fgets(str,MAXLINE,stdin) поэтому выполнение кода только двигаться вперед к следующей строке и getchar(), после того, как вы нажмете ввести или EOF .Сма Этот вопрос What does fgets do? за то, как fgets work.Now Потому что getchar никогда не будет работать над вашим вводом целиком, а цикл становится бесполезным.

  2. Выше была главная проблема, удаление fgets() позволит getchar() принимать символы и цикл будет work.Another Проблема в линии else if (c >= 'a' && c <= 'a') и линии else if (c >= 'A' && c <= 'A'), вы должны ошибочно вместо z и Z сделал их a и A, поэтому он выиграл Не работай.

Исправление обоих этих кодексов будет работать хорошо.

Это ваша программа.

#include<stdio.h> 
#define MAXLINE 1000 
main() 
{ 
char str [MAXLINE]; 
int ndigit, nlower, nupper, nother; 
char c; 
printf("Enter any text with numbers or other characters if you like: "); 
fgets(str,MAXLINE,stdin);  //What Really Happens is whatever you are 
           //inputting is getting stored into the char array str 
           //Only after you press enter or EOF then 
           // execution move forward to getchar(). 
    //So you type the whole string and then it all get stored in str and then 
    //comes no output because getchar never executes. 

ndigit = nlower = nupper = nother = 0; 

while ((c = getchar()) != '\n') 
{ 
     if (c >= '0' && c <= '9') 
       ++ndigit; 
     else if (c >= 'a' && c <= 'a') //Change To (c>='a' && c<='z') 
       ++nlower; 
     else if (c >= 'A' && c <= 'A') //Change To (c>='A' && c<='Z') 
       ++nupper; 
     else 
       ++nother; 


} 
     printf("Digits : %d Lowercase Letters %d Uppercase Letters %d Other characters %d\n", ndigit, nlower, nupper, nother); 
} 

После изменения кода.

#include<stdio.h> 
#define MAXLINE 1000 //Redundant Line As You Are No Longer Using fgets. 
int main()   //Changed to int main() 
{ 

char str [MAXLINE]; //Redundant Line As You Are No Longer Using fgets. 
int ndigit, nlower, nupper, nother; 
char c; 
printf("Enter any text with numbers or other characters if you like: "); 
ndigit = nlower = nupper = nother = 0; 

while ((c = getchar()) != '\n') 
{ 
     if (c >= '0' && c <= '9') 
       ++ndigit; 
     else if (c >= 'a' && c <= 'z') 
       ++nlower; 
     else if (c >= 'A' && c <= 'Z') 
       ++nupper; 
     else 
       ++nother; 


} 
     printf("Digits : %d Lowercase Letters %d Uppercase Letters %d Other characters %d\n", ndigit, nlower, nupper, nother); 
} 
+1

У вас есть 4 выхода - вопрос не говорит о том, что он хочет 63 выхода (26 строчных букв, 26 букв в верхнем регистре, 10 цифр и суммарное ведро для всего остального)? Я согласен с тем, что ваши исправления необходимы, и ваше предположение о «смежных алфавитах» не является необоснованным (хотя EBCDIC имеет пробелы в своих алфавитах). –

+0

Вопрос был не совсем ясен, и я не смог удержать профессора от вопроса.Но у меня есть EOF вместо \ n, где я смотрю, чтобы посмотреть, как это сделать. Это немного сложно узнать, когда ваш преподаватель научил меня так же, как привет, мир в java, а затем нигде не просил узнать об этом. Книга не очень помогла, поэтому я обратился к вам, ребята, и вы, ребята, спасли меня! Я действительно новичок в C, поэтому любое объяснение помогает –

+0

Объяснение было замечательно, так как я новичок в этом программировании на c. Замечания тоже были хороши. Если у кого-то есть хорошая книга для начинающих, я могу читать, кроме языка программирования C, было бы неплохо. Спасибо –

Смежные вопросы