2013-07-24 5 views
0

Я следую вместе с книгой на C, чтобы узнать ее, и я пишу весь код в книге, чтобы следовать дальше, последняя из которых связана с массивами, должна сказать, сколько пробелов , вкладки и т. д. Есть, но когда я его выполняю, ничего не появляется, это просто пустое, так как я могу ввести что-то, а затем нажать enter, и ничего не происходит, это должно сказать мне, сколько из них есть?Ничего не видно C beginner

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

Вот код

#include <stdio.h> 

int main() 
{ 
    int c, i, nwhite, nother; 
    int ndigit[10]; 
    nwhite = nother = 0; 
    for (i = 0; i < 10; ++i) 
    ndigit[i] = 0; 
    while ((c = getchar()) != EOF) 
    if (c >= '0' && c <= '9') 
     ++ndigit[c-'0']; 
    else if (c == ' ' || c == '\n' || c == '\t') 
     ++nwhite; 
    else 
    ++nother; 
    printf("digits ="); 
    for (i = 0; i < 10; ++i) 
    printf(" %d", ndigit[1]); 
    printf(", white space = %d, other = %d\n", nwhite, nother); 
} 
+7

ли вы когда-нибудь ввести EOF? – chris

+8

Это выглядит подозрительно: 'printf ("% d ", ndigit [1]);' ... Вы не хотите печатать 'digit [i]'? –

+1

Если вы используете linux, используйте CTRL + D для предоставления EOF. – Jeyaram

ответ

0

Вы можете предоставить EOF с использованием следующих

WINDOWS:

Press F6 then ENTER 
or 

Ctrl+Z 

LINUX:

Ctrl+D 
+0

Также исправьте свой код 'for (i = 0; i <10; ++ i) printf ("% d ", ndigit [i]); // вместо ndigit [1] ' – P0W

0

Изменить

printf(" %d", ndigit[1]); 

к

printf(" %d", ndigit[i]); 

Нажмите Ctrl + D, чтобы дать EOF после ввода значения

Входной сигнал:

2 4 6 8  //3 white space + 1 new line = 4 white space 
[ctrl + d] 

Выход:

digits = 0 0 1 0 1 0 1 0 1 0, white space = 4, other =0 
1

Приложение принимает некоторые значения, а затем подсчитывает количество цифр (0-9) и пробелов. Комбинация клавиш для прерывания цикла - это не ENTER, а EOF, который в Linux равен CRTL-D, а в WINDOWS - CTRL-Z.

Тогда в вас приложении есть ошибка:

for (i = 0; i < 10; ++i) 
     printf(" %d", ndigit[1]); 

Для того, чтобы показать количество цифр это должно быть:

for (i = 0; i < 10; ++i) 
    printf(" %d", ndigit[i]); 

К сожалению, получение интерактивного ввода весьма проблематично при использовании scanf(), getchar(), fgets() и т. д. Именно поэтому большинство людей обычно пишут свои собственные пользовательские функции, часто получая целую строку от stdin и затем анализируя ее в соответствии с их потребностями. Однако, если вы хотите использовать ENTER для остановки цикла, вы можете изменить код следующим образом, но вы потеряете возможность подсчитать количество новых строк на входе.

#include <stdio.h> 

int main(void) 
{ 
    int c, i, nwhite, nother; 
    int ndigit[10]; 

    nwhite = nother = 0; 
    for (i = 0; i < 10; ++i) 
    ndigit[i] = 0; 

    while ((c = getchar()) != '\n') 
    if (c >= '0' && c <= '9') 
     ++ndigit[c-'0']; 
    else if (c == ' ' || c == '\n' || c == '\t') 
     ++nwhite; 
    else 
     ++nother; 
    printf("digits ="); 
    for (i = 0; i < 10; ++i) 
    printf(" %d", ndigit[i]); 
    printf(", white space = %d, other = %d\n", nwhite, nother); 

return 0; 

} 

Это должно работать так, как вы ожидали. Однако вам стоит подумать о том, чтобы написать лучшую функцию ввода, есть несколько интересных решений в Интернете.

EDIT

Основной() должен возвращать Int. Не пусто, а не bool, а не плавать. внутр. Просто int, ничего, кроме int, только int. Некоторые компиляторы принимают void main(), но это нестандартное и не должно использоваться.

Проверить некоторые примеры здесь: http://www.parashift.com/c++-faq-lite/main-returns-int.html

+0

Спасибо, ребята, не знали о CTRL + D, спасибо за то, что указали на ошибку тоже, не заметили этого раньше! И нет книги, которую я читаю, является старой и не говорит, чтобы добавить пустоту в основную функцию, так что, может быть, мне нужно изменить и прочитать более современную книгу? Спасибо всем!! – spergalerger

+0

Лучшая книга для изучения C - http://en.wikipedia.org/wiki/The_C_Programming_Language –

+0

Отметьте это сообщение: http://stackoverflow.com/questions/562303/the-definitive-c-book-guide- и-list –

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