2014-10-30 1 views
0

Привет, я относительно новичок в программировании, поэтому, пожалуйста, несите меня.Как напечатать это в C?

Я хотел бы сделать программу, которая принимает входной сигнал и выходы bcdefghijklmnopqrstuvwxy

else if (c == 'x') 
    ++nx; 

где х представляет собой букву входа, и где выход повторяется для каждой буквы входа.

Это то, что я написал до сих пор:

#include <stdio.h> 

main() { 

    int c; 

    while((c = getchar()) != EOF) { 
     printf("else if (c == '%d')\n", c); 
     printf("\t++n%d;\n", c); 
    } 

    return 0; 
} 

Вместо возвращения на выходе я хочу, выход

else if (c == '98') 
    ++n98; 
else if (c == '99') 
    ++n99; 
else if (c == '100') 
    ++n100; 
else if (c == '101') 
    ++n101; 
else if (c == '102') 
    ++n102; 
... 

Почему c не работает в качестве переменной?

Большое вам спасибо за помощь!

+8

' '% d' 'должно быть'' % c''. – indiv

+3

Если вы пишете программу, которая пишет другую программу, вам лучше иметь по-настоящему вескую причину. Это похоже на то, что у вас есть еще одна проблема с базовым дизайном, которая требует обработки. –

+2

Вы также можете сделать код более понятным с помощью оператора 'switch', а не серии' if-else'. – aruisdante

ответ

2

При написании на C и печати строки, обозначенной форматированием на stdout, вам нужно убедиться, что вы используете подходящие спецификаторы формата. Это гарантирует, что ваш аргумент будет правильно отформатирован и вставлен в результирующую строку, как вы ожидали.

В вашем случае вам необходимо использовать %c. Однако в настоящее время у вас есть %d, что эквивалентно %i для целых чисел. Вы можете больше узнать о других спецификаторах формата, чтобы узнать больше о других параметрах.

Вот интересно читать на эту тему:

http://www.codingunit.com/printf-format-specifiers-format-conversions-and-formatted-output

-1

Попробуйте использовать

printf("else if (c == '%c')\n", c); 
printf("\t++n%c;\n", c); 

См printf specifiers

% D спецификатор для intergers

0

Try:

#include <stdio.h> 

main() { 

char c; 

while((c = getchar()) != EOF) { 
    printf("else if (c == '%c')\n", c); 
    printf("\t++n%c;\n", c); 
} 

return 0; 
} 

что вы хотите, персонажи не Ints

1

Вы использовали %d в своем printf, но %d если для целых чисел. Вы хотите напечатать символ, поэтому он должен быть %c.
Заменить %d на %c

Больше по этой ссылке: http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/format.html

+1

И 'c', и' d' предназначены для 'int'. Разница заключается в том, как они печатаются. – mafso

3

Вы хотите c == '%c' сравнить по характеру или c == %d (без кавычек) для сравнения по порядковому значению, но вы действительно должны научиться использовать массивы. Похоже, вы пытаетесь каким-то образом скомпоновать код и используете генератор кода, чтобы сэкономить вам некоторую типизацию. Вместо этого:

int n[256] = {0}; /* storage for counters, initialized to zero */ 

и:

n[c]++; // increment the counter for character c; 

Ты код будет гораздо короче.