почему первая версия печатает новую строку как 129, а вторая работает нормально?
Когда я запускаю первую программу, nl
(новая строка) устанавливается на 7ff и выводит 129.
#include<stdio.h>
// countblanks-tabs-newlinesv1.c
void main()
{
long int c;
unsigned char nl, space, tab = 0 ;
while( ( c = getchar() ) != EOF)
{
if ( c == '\n')
{
nl++;
}
if ( c == ' ')
{
space++;
}
if ( c == '\t')
{
tab++;
}
}
printf("input has %d newlines, %d spaces and %d tabs\n", nl, space, tab);
}
Но когда запускаю вторую программу, все работает нормально... Думаю.
Вторая программа
#include<stdio.h>
// countblanks-tabs-newlinesv2.c
void main()
{
long int c;
char space, tab ;
int nl;
nl = 0;
space = 0 ;
tab = 0;
while( ( c = getchar() ) != EOF)
{
if ( c == '\n')
{
nl++;
}
if ( c == ' ')
{
space++;
}
if ( c == '\t')
{
tab++;
}
}
printf("input has %d newlines, %d spaces and %d tabs\n", nl, space, tab);
}
Кстати, это упражнение 1-8 из Книги по языку программирования C
1 ответ
Вы не инициализировали nl
а также space
к 0
в первой версии. У них непредсказуемые начальные значения, поэтому вы получите непредсказуемую сумму.
Когда ты пишешь
unsigned char nl, space, tab = 0 ;
то = 0
инициализатор применяется только к tab
, не все переменные. Каждому из них необходимо указать начальное значение:
unsigned char nl = 0, space = 0, tab = 0 ;