2012-06-21 2 views
2

Я читаю Язык программирования C. Вот вопрос, который говорит Напишите программу для подсчета пробелов, вкладок и символов новой строки. Теперь я могу использовать \ n для строк новой строки и \ t для вкладок, но я слышу первый раз про пробелы! Что это значит для пробелов? Для новых строк и закладками, я составил следующую программу:программа, которая подсчитывает пробелы, вкладки и символы новой строки

#include <stdio.h> 

/* program to count blanks, tabs, and newlines */ 
main(){ 
    long blanks, tabs, newlines, input; 

    blanks = 0; 
    tabs = 0; 
    newlines = 0; 
    input = 0; 
    while ((input = getchar()) != EOF) 
     if (input == '\n') 
      ++newlines; 
     else if (input == '\t') 
      ++tabs; 

    printf("Total newlines: %ld\nTotal Tabs: %ld", newlines, tabs); 
} 
+0

Пустой, как правило, просто символ пробела (»«). –

+0

Заготовки буквально представлены символом «» в C – squiguy

+0

squiguy, «" обозначает нулевой конец символьного массива. Вы имели в виду ' '. – Josh

ответ

4

заготовки = пространства (' ')

Хотя ваш код работает, я настоятельно рекомендую добавлять { } для тела цикла.

+0

Добавление шума как ненужных брекетов - это плохая практика. –

+4

@ Jerry Coffin: Надеюсь, вы поймете, что это ужасный совет для новичка ... –

+0

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

0

Пустое это просто пространство, большую часть времени. Вероятно, вам стоит заглянуть в функцию isblank(), чтобы помочь в классификации.

+3

Никогда не слышал о 'isblank'; возможно, вы имели в виду 'isspace'? Вам также нужно быть осторожным с заказом, используя это, так как это скажет, что новые строки и вкладки являются «пространством». –

0

Я уверен, что они означают символ пробела ''.

Смотрите здесь коды ASCII:

http://www.asciitable.com/

также 0x13 является возврат каретки, может захотеть взглянуть на это? Newlines на самом деле не так просто в зависимости от того, как отформатирован файл:

http://en.wikipedia.org/wiki/Newline

И, как уже говорили другие, вы можете рассмотреть возможность использования функций из

http://www.cplusplus.com/reference/clibrary/cctype/

0
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
printf("Type and Press Enter. CTRL-Z for EOF:\n"); 
int c; 
int b = 0; 
int t = 0; 
int nl = 0; 

while((c = getchar())!=EOF){ 

    putchar(c); 
    if(c=='\t') 
     ++t; 

    if(c==' ') 
     ++b; 
    if(c=='\n') 
     ++nl 

} 

printf("\n%d and %d\n",b,t,nl); 


return 0; 

}

Вы добавили else, если это не требуется здесь, так как нам нужно знать все 3 значения.

0

, пожалуйста, найдите нижеприведенный код, это поможет решить весь вопрос.

#include <stdio.h> 

/* Count blank, tabs, and new lines */ 

main() 
{ 
    long c, b, t, l; /* c for characters, b for blanks, t for tabs, l for lines */ 

    b = 0; 
    t = 0; 
    l = 0; 

    while ((c = getchar()) != EOF) 
    { 

     if (c == '\n') 
     ++l; 
     if (c == '\t') 
     ++t; 
     if (c == ' ') 
     ++b; 
    } 

    printf ("\n No of blanks : %d \n", b); 
    printf ("\n No of tabs : %d \n", t); 
    printf ("\n No lines in input: %d \n", l); 
} 
0

Я думаю заготовки новые линии следуют новой линии

 #include<stdio.h> 
     int main() 
     { 
      int c,nl,nb,nt; 
      nl = 0; 
      nb = 0; 
      nt = 0; 
      int flag =1; 

      while((c = getchar()) != EOF){ 
       if(c == '\n') 
       { 
        ++nl; 
        if(flag) 
        ++nb; 
        flag = 1; 
       } 
       else 
       flag = 0;  

       if(c == '\t') 
       ++nt;  
      } 
      printf("lines : %d, tabs: %d, blanks: %d", nl, nt, nb);  

      return 0; 
     }