标题:新手求助,关于_bool用int代替的问题
只看楼主
小鸦
Rank: 2
等 级:论坛游民
帖 子:8
专家分:24
注 册:2013-3-29
结帖率:100%
已结贴  问题点数:5 回复次数:4 
新手求助,关于_bool用int代替的问题
本人新手,刚刚开始自学C没几周,也刚刚知道这个论坛,所以不知道类似的问题有没有人提过....(关键字里咱没搜到...)如有重复,那...那望大神们重复回答吧。

背景...
我是在看 c primer 这本书。
现在碰到一个例题————统计字符、单词、和行。细细看过书之后,想在编译器上敲敲代码实现一下。编译器是 visual c++ 6.0。
原文代码是这样的:

#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#define STOP '|'
int main(void)
{
    char c;                  //读入字符
    char prev;               //前一个读入字符
    long n_chars = 0L;       //字符数
    int n_lines = 0;         //行数
    int n_words = 0;         //单词数
    int p_lines = 0;         //不完整的行数
    bool inword = false;

    printf("Enter text to be analyzed ( | to terminate):\n");
    prev = '\n';
    while((c=getchar())!=STOP)
   {
        n_chars++;           //统计字符
        
        if(c=='\n')
           n_lines++;       //统计行
        
        if(!isspace(c)&&!inword)
        {
            inword = true;   //开始一个新单词
            n_words++;       //统计单词
        }
        
        if(isspace(c)&&inword)   
       {
            inword = false;  //到达单词尾部
            prev = c;        
        }
        
        if(prev!='\n')
            p_lines = 1;

        printf("characters=%ld, words=%d, lines=%d",n_chars,n_words,n_lines);
        printf("partial lines=%d\n",p_lines);
        
        return 0;
}

运行之后出错,编译器找不到<stdbool.h>头文件。那就不能用bool了。我就试着用int类型,ture为1,其余为0. bool inword 改为 int inword = 1(底下相应的地方也都改了,我也不知道这样行不行,就这么试着改改,经过修改之后程序依然运行不了。度娘之后有人说,把#include<stdbool.h>换成#define bool int,#define true 1,#define false 0。我试着修改,就有下面的代码。


#include<stdio.h>
#include<ctype.h>
#define bool int
#define true 1
#define false 0
#define STOP '|'
int main(void)
{
    char c;                  
    char prev;               
    long n_chars = 0L;      
    int n_lines = 0;         
    int n_words = 0;         
    int p_lines = 0;         
    bool inword = false;

    printf("Enter text to be analyzed ( | to terminate):\n");
    prev = '\n';
    while((c=getchar())!=STOP)
    {
        n_chars++;            
        
        if(c=='\n')
            n_lines++;      
        
        if(!isspace(c)&&!inword)
        {
            inword = true;   
            n_words++;      
        }
        
        if(isspace(c)&&inword)  
        {
            inword = false;
            prev = c;        
        }
        
        if(prev!='\n')
            p_lines = 1;

        printf("characters=%ld, words=%d, lines=%d",n_chars,n_words,n_lines);
        printf("partial lines=%d\n",p_lines);
        
        return 0;
}


可是还是运行不了,fatal error C1004: unexpected end of file found....

请问该怎么修改才能使程序正确运行呢?(可能用以后的知识还存在着更好的实现方法,但是我刚刚学习,刚学到这里,有人说不懂放着往后学,之后再回来看以前不懂的就会慢慢懂了。但是正好现在有时间,我就先把这个个人问题抛出来了。所以想知道对于这个例题怎么用int代替bool,并能顺利运行。

搜索更多相关主题的帖子: include visual 关键字 
2013-03-30 04:12
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:2 
程序代码:
#include<stdio.h>
#include<ctype.h>
#define bool int
#define true 1
#define false 0
#define STOP '|'
int main(void)
{
    char c;
    char prev;
    long n_chars = 0L;
    int n_lines = 0;
    int n_words = 0;
    int p_lines = 0;
    bool inword = false;
    printf("Enter text to be analyzed ( | to terminate):\n");
    prev = '\n';
    while((c=getchar())!=STOP) {
        n_chars++;
        if(c=='\n')
            n_lines++;
        if(!isspace(c)&&!inword) {
            inword = true;
            n_words++;
        }
        if(isspace(c)&&inword) {
            inword = false;
            prev = c;
        }
        if(prev!='\n')
            p_lines = 1;
        printf("characters=%ld, words=%d, lines=%d",n_chars,n_words,n_lines);
        printf("partial lines=%d\n",p_lines);
    }
        return 0;
}

编译器提示很清楚了,你少了括号


[ 本帖最后由 peach5460 于 2013-3-30 08:13 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-30 08:00
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:3 
如2楼所言,你的while只有'{',少了一个‘}’

没有 _bool 吧,C语言中布尔类型应当是 _Bool

用 int 是没法完美模拟 _Bool 特性的

如果你想学C语言,就不能用VC,因为VC不支持现在的C标准,它支持的好象是C89/C90。
编译器建议你使用 MinGW,集成开发环境建议你用 CodeLite 或 Code::Blocks
如果你使用 MinGW,它默认的标准好象是gun c,只要加上编译参数 -std=c99 就能支持C99了
2013-03-30 08:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
仔细看书,明白bool是什么意思,自然知道怎么实现,别说用int,用char也可以。

授人以渔,不授人以鱼。
2013-03-30 08:48
X1AO
Rank: 3Rank: 3
来 自:北京邮电大学
等 级:论坛游侠
威 望:1
帖 子:52
专家分:123
注 册:2013-3-6
得分:0 
回复 4楼 TonyDeng
精髓。

不要问我下课干什么,我陪瓜哥上厕所。
2013-03-30 12:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-402333-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.877625 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved