精华内容
下载资源
问答
  • 小白入门C语言

    2013-10-29 10:57:01
    如何快速的学习C语言 1.程序的工作原来是怎么样的? 我们写出来的程序最终都是交与CPU进行执行,但是计算机的体系之中只有0和1,所以我们写出来的字节码程序必须要翻译成一种cpu能懂的语言。这一步就叫编译。...

    该如何快速的学习C语言

    1.程序的工作原来是怎么样的?

    我们写出来的程序最终都是交与CPU进行执行,但是计算机的体系之中只有01,所以我们写出来的字节码程序必须要翻译成一种cpu能读懂的语言。这一步就叫编译。通过编译,就可以将我们写好的程序转变成一个二进制程序,就能在cpu上运行。

    2.如何写出第一个C语言程序?

    c语言程序的后缀名都是.c ,所以我们在桌面建立一个test.c 文件,建立一个空的.txt 程序,然后把后缀名改掉就可以,就像这样。

    然后我们双击这个文件

    进入到这个界面之后我们就可以在中间的这个界面输入我们的代码了。

     

    代码写完了,现在要做的就是翻译成二进制文件,按下F5 即可,或者点击构建菜单下面的运行。

    你会看到同目录下出现test.o test.exe .o程序也是一个二进制文件,是一个中间产品,.exe就是最终编译好产生的二进制文件。是可以直接运行的。

     

    这就是程序的运行结果,在屏幕上输出了hello world

     

    3. 语法快速入门

    C语言的一个很重要的组成部分就是函数,这里的函数 指的就是 一个封装好的代码块,在hello world 中 main就是一个函数,C里面的所有东西基本都是函数,像printf 也是 一个函数。另外 一个很重要的特征就是程序是按照顺序执行的,从最上面一个语句依次往下。记住这几个原则,马上就可以进入C语言的学习了。

    展开全文
  • 第一章站在宏观却不失条理角度来讲解程序怎么跑起来的。实例程序1.1如下所示:#include<stdio.h> int main() { printf("hello world"); return 0; }该程序在执行后输出的是“hello ...

        正如题目展示,第一章的主题是“计算机系统展示”(A Tour of Computer Systems)。第一章站在宏观却不失条理角度来讲解程序是怎么跑起来的。实例程序1.1如下所示:

    #include<stdio.h>
    int main()
    {
       printf("hello world");
       return 0;
    }

    该程序在执行后输出的是“hello world”。可是计算机是怎么理解程序的呢?或者计算机是如何理解上述的程序语言呢?

    这是一个十分有趣的过程,不过在这里展开。篇幅为庞大。今天先讲解的为一个C程序的编译过程(The compilation system)。下为流程图:


      接下来逐步分析该流程图:

    •  hello.c输入是程序文件输入,也就是实例程序1.1.
    • Pre-processor(cpp):预处理器。顾名思义:也就是对程序进行预处理。C程序中特指“”#“”包含的库文件。预处理器将库文件直接导入到源代码中,此例就是将头文件“stdio.h”导入到源程序中,生成hello.i源代码。
    • Complier:将hello.i 翻译为汇编语言。生成hello.s
    • Assembly phase:将汇编语言转化为机器指令(The Assembler translates hello.s into machine-language instructions)。生成二进制文件——hello.o。
    • Linker:链接器:实例程序1.1使用了标准C语言库中的printf 函数。而printf的源码编译文件为printf.o,此时此时并不在hello.o中。而链接器的作用就是将printf.o导入到hello.o中。进而生成一个可执行的二进制文件!
       自此 ,本篇博文结束。如有问题,请各位不吝指教,本人不盛感激。大笑  


    展开全文
  • 求大侠告诉我该怎么改!!!!1.程序思路:先从文本文件test中读出内容,放到char tmp中;的过程,遇到“name=apple”时,不将它放入tmp中,而是换成“name=banana”;最后再将tmp的内容写入文本文件test.2.文本文件...

    大侠:c语言修改文件出错,求解!

    (2012-04-11 00:23:07)

    标签:

    c语言

    杂谈

    大侠:c语言修改文件出错,求解!求大侠告诉我该怎么改!!!!

    1.程序思路:

    先从文本文件test中读出内容,放到char tmp中;

    读的过程,遇到“name=apple”时,不将它放入tmp中,而是换成“name=banana”;

    最后再将tmp的内容写入文本文件test.

    2.文本文件test中的内容:

    sort=fruits;

    name=apple

    price=4

    3.程序:(程序代码见下,运行在linux下)

    #define _GNU_SOURCE

    #include

    #include

    #include

    #define txtfile "test"

    int main()

    {

    FILE *fp, *fp2; char tmp;char *line; size_t len; int ret;

    //read content form txtfile;

    fp=fopen(txtfile,"r");

    if(fp == NULL){perror(txtfile);exit(EXIT_FAILURE);}

    while ((read = getline(&line, &len,

    fp)) != -1) {

    if(line=="\n")continue;

    if(strstr(line,"name=apple"))

    strcat(tmp,"name=banana");

    else

    strcat(tmp,line);

    strcat(tmp,"\n");

    }

    fclose(fp);

    //write content from tmp back to txtfile;

    fp2 = fopen(txtfile, "w");

    if(fp == NULL){perror(txtfile);exit(EXIT_FAILURE);}

    ret=fputs(tmp,fp);

    if(ret <0||ret==EOF)

    printf("Write error!\n");

    fclose(fp2);

    return 0;

    }

    4.执行时出现错误:

    $ ./a.out

    *** glibc detected *** ./a.out: realloc(): invalid pointer:

    0x008acfc0 ***

    ======= Backtrace: =========

    /lib/i686/nosegneg/libc.so.6(realloc+0x3ab)

    /lib/i686/nosegneg/libc.so.6

    /lib/i686/nosegneg/libc.so.6(realloc+0x3c)

    /lib/i686/nosegneg/libc.so.6(getdelim+0x16a)

    /lib/i686/nosegneg/libc.so.6(getline+0x33)

    ./a.out

    /lib/i686/nosegneg/libc.so.6(__libc_start_main+0xdc)

    ./a.out

    ======= Memory map: ========

    00893000-008ac000 r-xp 00000000 08:01 7997060 /lib/ld-2.5.so

    008ac000-008ad000 r--p 00018000 08:01 7997060 /lib/ld-2.5.so

    008ad000-008ae000 rw-p 00019000 08:01 7997060 /lib/ld-2.5.so

    008b4000-009ef000 r-xp 00000000 08:01 7997061

    /lib/i686/nosegneg/libc-2.5.so

    009ef000-009f1000 r--p 0013a000 08:01 7997061

    /lib/i686/nosegneg/libc-2.5.so

    009f1000-009f2000 rw-p 0013c000 08:01 7997061

    /lib/i686/nosegneg/libc-2.5.so

    009f2000-009f5000 rw-p 009f2000 00:00 0

    00a98000-00a99000 r-xp 00a98000 00:00 0

    00c9e000-00ca9000 r-xp 00000000 08:01 7997070

    /lib/libgcc_s-4.1.1-20061011.so.1

    00ca9000-00caa000 rw-p 0000a000 08:01 7997070

    /lib/libgcc_s-4.1.1-20061011.so.1

    08048000-08049000 r-xp 00000000 08:03

    24414215/home/apples/test/a.out

    08049000-0804a000 rw-p 00000000 08:03

    24414215/home/apples/test/a.out

    0903c000-0905d000 rw-p 0903c000 00:00 0

    b7ef1000-b7ef2000 rw-p b7ef1000 00:00 0

    b7f0d000-b7f0f000 rw-p b7f0d000 00:00 0

    bfd49000-bfd5f000 rw-p bfd49000 00:00 0

    Aborted回复 #1 apple_7095 的帖子getline函数用的有问题。要么

    char *line=NULL;

    要么line指向malloc的内存

    getline()readsan entire line from stream, storing the address of

    the buffer containing the text into *lineptr. The buffer is

    null-terminated and includes the newline character, if one was

    found.

    If *lineptr is NULL, then getline() will allocate a buffer for

    storing the line, which should be freed by the user program.

    Alternatively,before calling getline(), *lineptr can contain a

    pointer to a malloc()-allocated buffer *n bytes in size. If the

    buffer is not large enough to hold the line, getline() resizes it

    with realloc(),updating *lineptr and *n as necessary. In either

    case, on a successful call, *lineptr and *n will be updated to

    reflect the buffer address and allocated size respectively.

    tmp要先初始化

    strcat(tmp,"\n");

    这句也有点问题,结果会多出空行无聊,把代码格式化了一下,一下子就看到一个BUG了

    #define _GNU_SOURCE

    #include

    #include

    #include

    #define txtfile "test"

    int main()

    {

    FILE *fp, *fp2; char tmp;char *line; size_t len; int ret;

    //read content form txtfile;

    fp=fopen(txtfile,"r");

    if(fp == NULL)

    {

    perror(txtfile);

    exit(EXIT_FAILURE);

    }

    while ((read = getline(&line, &len,

    fp)) != -1)

    {

    if(line=="\n")

    {

    continue;

    }

    if(strstr(line,"name=apple"))

    {

    strcat(tmp,"name=banana");

    }

    else

    {

    strcat(tmp,line);

    }

    strcat(tmp,"\n");

    }

    fclose(fp);

    //write content from tmp back to txtfile;

    fp2 = fopen(txtfile, "w");

    if(fp == NULL)——fp2???

    {

    perror(txtfile);

    exit(EXIT_FAILURE);

    }

    ret=fputs(tmp,fp);

    if(ret <0||ret==EOF)

    {

    printf("Write error!\n");

    }

    fclose(fp2);

    return 0;

    } 另外

    局部变量未初始化,比如tmp。

    看程序的要求,以及代码的风格,估计楼主还是学生吧;

    嗯,一点小建议,代码写完了,不用立即就编译,立即就运行,先看看代码是不是有明显的BUG;

    [ 本帖最后由 ilex 于 2009-1-10 22:25 编辑 ]简单修改

    #define _GNU_SOURCE

    #include

    #include

    #include

    #define txtfile "test"

    int main()

    {

    FILE *fp, *fp2;

    char tmp;

    char *line=NULL;

    size_t len; int ret;

    memset(tmp, 0x00, sizeof(tmp));

    //read content form txtfile;

    fp=fopen(txtfile,"r");

    if(fp == NULL) {

    perror(txtfile);

    exit(EXIT_FAILURE);

    }

    while ((ret= getline((char **)&line,

    &len, fp)) != -1) {

    //if(line=="\n")continue;

    if (line == '\n') continue;

    if(strstr(line,"name=apple"))

    strcat(tmp,"name=banana\n");

    else

    strcat(tmp,line);

    //strcat(tmp,"\n");

    }

    if (line != NULL) {

    free(line);

    }

    fclose(fp);

    //write content from tmp back to txtfile;

    fp2 = fopen(txtfile, "w");

    if(fp2 == NULL) {

    perror(txtfile);

    exit(EXIT_FAILURE);

    }

    ret=fputs(tmp,fp);

    if(ret <0||ret==EOF)

    printf("Write error!\n");

    fclose(fp2);

    return 0;

    }怎么看这段代码内容跟man手册 man getline中的例子越一样楼主看看这个吧:

    http://www.newsmth.net/bbscon.php?bid=745&id=75438#define

    _GNU_SOURCE

    #include

    #include

    #include

    #define txtfile "test"

    int main()

    {

            FILE

    *fp, *fp2; char tmp[200];char *line; size_t len; int ret;

            //read

    content form txtfile;

            fp=fopen(txtfile,"r");

            if(fp

    == NULL)

           {

                  perror(txtfile);

                  exit(EXIT_FAILURE);

           }

            while

    ((read = getline(&line, &len, fp))

    != -1)

            {

                    if(line=="\n")

                    {

                           continue;

                    }

                    if(strstr(line,"name=apple"))

                    {

                            strcat(tmp,"name=banana");

                    }

                    else

                    {

                            strcat(tmp,line);

                    }

                    strcat(tmp,"\n");

            }

            fclose(fp);

            //write

    content from tmp back to txtfile;

            fp2

    = fopen(txtfile, "w");

            if(fp

    == NULL)——fp2???

            {

                   perror(txtfile);

                   exit(EXIT_FAILURE);

            }

            ret=fputs(tmp,fp);

            if(ret

    <0||ret==EOF)

            {

                    printf("Write

    error!\n");

            }

    &n

    分享:

    a4c26d1e5885305701be709a3d33442f.png喜欢

    0

    a4c26d1e5885305701be709a3d33442f.png赠金笔

    加载中,请稍候......

    评论加载中,请稍候...

    发评论

    登录名: 密码: 找回密码 注册记住登录状态

    昵   称:

    评论并转载此博文

    a4c26d1e5885305701be709a3d33442f.png

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    展开全文
  • 在编程时往往要求到的扩展性,实现扩展性的一个重要方法是抽象化,对数据及其要做的处理都封装起来,当做一个黑盒子,不用在乎其内部怎么实现,我只需要一个输入,你给我一个我想要的输出,相比于C语言等面向过程的...

    边读边记录,文章会很长,所以一次没办法写完

    面向对象:
    该如何考虑在2.3.8提到的:只有包含继承关系的类才会具有多态性?
    在编程时往往要求到的扩展性,实现扩展性的一个重要方法是抽象化,对数据及其要做的处理都封装起来,当做一个黑盒子,不用在乎其内部怎么实现,我只需要一个输入,你给我一个我想要的输出,相比于C语言等面向过程的语言中对数据封装的结构体,面向对象语言的使用类对数据及其操作方法进行了封装,对数据的处理通过这些可将的操作方法来完成的,这里的类已经是一个黑盒子,我们不知道其处理方法,但我们可以拿到想要的结果,黑盒子的出现降低了程序的复杂度,对于使用了这个黑盒子的其他程序而言,在黑盒子中出现的修改变更是不可见的,由此,在有了需求需要改动实现者再次改动了这个黑盒子后,也不会对外部使用这个黑盒子的程序造成任何代码上的影响,结果上的一致可以由实现者使用完备的单元测试来保证。
    对于多态性,很多资料上已经提到了很多了,即不同种类的东西当做同一类来解决,面向对象的编程语言都具有下面两点共同的特性:

    1.不需要知道内部的详细处理就可以进行操作(封装,数据抽象)
    2.根据不同的数据类型知道选择适当的方法(多态性)

    第一点就是开头写道的内容,对于第二点,按照书中描述得内容,根据数据类型进行合适的处理(调用合适的方法)应该是编程语言完成的事,该如何理解这句话?结构化的编程方法带来了对程序逻辑的限制,实现了我们需要的功能,虽然其降低了程序的自由度,但设想一种场景:

    public void Open(box)
    {

    if(TypeOf(box) == "A")
    {
    system.out.println("打开箱子");
    }
    
    else if(TypeOf(box) == "B")
    {
    system.out.println("开锁,打开箱子");
    }
    
     else
    {
    system.out.println("打不开箱子");
    }
    

    }

    这个时候新增了一个类型C,那么需要重写上面的结构。对于正常工作的代码再去修改会有风险。

    public class A
    {

        public void Open(){system.out.println("打开箱子");}
    

    }

    public class B
    {

        public void Open(){system.out.println("开锁,打开箱子");}
    

    }

    继承是实现多态的基础,因此当A,B,C都继承自对象Box,那么直接调用Open方法就可以实现if,else的功能。
    多态能减少代码中出现的分支数量,且在扩展时满足使用新增避免修改。

    多重继承和单一继承
    Java,C#中类只能为单一继承,这样做的目的,是因为结构简单,如果使用允许类多重继承,那么类之间的关系不再是一个树而是一个图,这样会导致继承之两个父类如果有相同的实现方法会带来冲突,即一个是优先级问题,另一个,当某个类出现问题后,多重继承会对问题的定位带来麻烦。但对于多重身份的类而言,多重继承是必不可少的。所以在Java中,解决办法是类只允许单一继承(extends),但接口允许多重继承(implements),在Ruby中使用Mix-in来解决。

    展开全文
  • C语言:回文数

    2016-10-14 10:24:52
    那么,怎么程序来判断一个数是不是回文数呢?最简单的一个办法就是将数逆序,然后与其原数进行比较,相等则是回文数,反之,不是回文数; 程序如下: #include int main() { long int num = 123454321; ...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对MCU系统的C语言和C编译器非常熟悉,特别要注意C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 2.6 为什么声明externf(structx*p);给我报了一个晦涩难懂的警告信息? 2.7 我遇到这样声明结构的代码:structname{intnamelen;charnamestr[1];}...
  • o 3.14 程序运行正确, 但退出时却 ``core dump''了,怎么回事? o 3.15 可以初始化一个联合吗? o 3.16 枚举和一组预处理的 #define 有什么不同? o 3.17 有什么容易的显示枚举值符号的方法? * 4. 表达式 o...
  • 写了个程序,要删除E:\\hugo.txt,确保文件已关闭,不是只可,为什么仍然出现了permission denied,该怎么解决
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 22 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 23 2.7 我遇到这样声明结构的代码:struct name {int namelen; ...
  • 2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 2.7 我遇到这样声明结构的代码:struct name {int namelen; char namestr[1...
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 22 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 23 2.7 我遇到这样声明结构的代码:struct name {int namelen; ...
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 2.6 为什么声明externf(structx*p);给我报了一个晦涩难懂的警告信息?  2.7 我遇到这样声明结构的代码:structname{intnamelen;charnamestr[1];}...
  • 怎么样的程序才算是人能懂的程序呢,小弟不才虽没写过几句代码,但是还是想说说个人的看法。 个人认为写好程序大概分为几个步骤: 1.写正确的程序,如果一个程序逻辑不对不能实现有的功能,...
  • C、C++、Java、Python该怎么选?   对于很多对编程感兴趣的小伙、或是正在计算机专业的大学生来说,不知道要选择哪一门编程语言发展。对于计算机专业的学生,一般的学习都普遍会开始设C、C++、Java等热门的编程...
  •  *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 2.6 为什么声明externf(structx*p);给我报了一个晦涩难懂的警告信息? 2.7 我遇到这样声明结构的代码:structname{intnamelen;charnamestr[1];...
  • 然后逐行的懂了这个程序,能够很顺利的用运行显示出所有数据,但是我想进一步做的时候发现自己需要将没一行数据单独进行运算,而这个程序是检测后直接一个个的将一整行显示了,所以我不知道该怎么进行下一步的数据...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    2.14 程序运行正确, 但退出时却“core dump”了,怎么回事? . . . . . 10 2.15 可以初始化一个联合吗? . . . . . . . . . . . . . . . . . . . . . . . 10 2.16 枚举和一组预处理的#define 有什么不同? . . . . ....
  •  2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法?  2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息?  2.7 我遇到这样声明结构的代码:struct name {int namelen; char ...
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 51 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 52 2.7 我遇到这样声明结构的代码:struct name {int namelen; char...
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 51 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 52 2.7 我遇到这样声明结构的代码:struct name {int namelen; char...
  • 2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 2.7 我遇到这样声明结构的代码:struct name {int namelen; char namestr[1...
  • 虽说这个一般不归到算法里面,但是毕竟基础程序设计里用的还是比较多。尤其是今天在用C语言读字符串的时候,发现了很有趣的现象,怎么去处理最后一个回车。先占个坑,明天总结一下这个问题。

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

c语言读程序该怎么读

c语言 订阅