俊介三

一天更新一点,一天积累一点

导航

C/C++ IO小节

Posted on 2013-04-06 19:49  俊介三在前进  阅读(175)  评论(0)    收藏  举报

我们使用的很多函数实际上不是函数,而是宏macro

例如:(getc()、putc()实际上也不是函数)

#define getchar() getc(stdin)
#define putchar((c)) putc((c), stdout)

 

总结C语言的输入输出:

#include <cstdio>
#include <iostream>
using namespace std;

int main(){
    
    //注意,声明为int,因为int范围比char要大
    int ch;
    //从stdin中获得一个char
    ch = getchar();
    //把ch输出到stdout
    putchar(ch);
    
    //把内容输出到stdout
    printf("hello, %s\n", "morgan");
    //把内容输出到buf中
    char buf[1000];
    sprintf(buf,"hello, %s","lulu");
    //把内容输出到文件指针fp所指的"文件"上,linux上任何设备都是"文件"
    FILE *fp = fopen("C:\\test.txt","rw");
    fprintf(fp,"Hello, world!\n");

    //从stdin中读取数据
    int score;
    char course[100];
    scanf("%d %s", &score, course);
    //从指定字符串中读取数据
    sscanf("95 C++", "%d %s", &score, course);
    //从指定文件流中读取数据
    fscanf(fp, "%d %s", &score, course);



    /**********行输入输入出**********/

    //把buf的内容作为一行输出到stdout
    //fputs(char* line, FILE* fp)跟puts()区别略大,puts()会自动加个换行在后面呢
    puts(buf);
    //从stdin中读一行到buf
    //fgets(char* line, int maxline, FILE* fp)跟gets()区别略大,gets()不会吃了(就是读取)最后的换行
    gets(buf);
    
    return 0;
}

很常见的一个问题,上次查了好久:
一行数据里面有好些个单词,逐个读出来进一步处理(每个单词由空格隔开,最后按回车结束这一行)。
思路:while循环读取每一个单词,但while循环结束条件是什么呢?scanf("%s",word)==0;吗?
不是的!应该这样:

#include <cstdio>
#include <iostream>
using namespace std;

int main(){
    char buf[100];
    while(scanf("%s",buf)){
        printf("%s\n",buf);

        //要不就把空格给吃掉,不会影响到上面buf数据的读取
        //要不就读到换行,直接退出循环。
        if(getchar()=='\n') break; 
    }
    
    return 0;
}


C++的后面再总结,目测C的IO已经足够了。