0

当我运行第一个程序时,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);


}   

顺便说一句,这是The C Programming Language Book中的练习 1-8

4

1 回答 1

3

您没有在第一个版本中初始化nl和。它们具有不可预测的初始值,因此您会得到不可预测的总数。space0

当你写

unsigned char nl, space, tab = 0  ;

= 0初始化器仅适用于,而不适用于tab所有变量。您需要为它们中的每一个提供一个初始值:

unsigned char nl = 0, space = 0, tab = 0  ;
于 2020-01-23T01:41:27.387 回答