C语言中从标准输入读取几行输入,并打印到标准输出上两种方法

来源:互联网 发布:乐清知临寄宿学校招生 编辑:程序博客网 时间:2024/04/30 11:02

            C语言中经常遇到要求将标准输出的内容打印到标准输出上的问题。但是如何算是成功的打印到标准输出上却有不同的理解,是输入一行打印一行,还是输入所有之后在将其按顺序打印出来。这两种方式效果完全不同。

方式一:例如:输入:                                    屏幕上显示:
                    aaa                                                    1.aaa
                    bbb                                                    2.bbb
                    ccc                                                     3.ccc

方式二:或者,输入一行显示一行:

              输入 :                    aaa                                         
   屏幕上显示:                1.aaa    
              输入:                    bbb                                         
   屏幕上显示:                 2.bbb
     

              输入:                    ccc                                       
   屏幕上显示:                3.ccc  

然两种输出方式不同,对应的代码自然不同:

若想输出方式一:可以采用如下代码

<span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(){    char ch;    int For_Switch= 1;    int count = 1;    int i = 0;    while ((ch=getchar())!=EOF)    {        if (For_Switch == 1)        {            printf("%d.",count);            count++;            For_Switch++;        }        if ('\n'==ch)        {            For_Switch = 1;        }           putchar(ch);    }    return 0;}</span>
注:输入一行后,按回车输出一行。其中的For_Switch变量相当于一个起到开关作用的变量。每次遇到'\n'之后,开关

就会打开,所以在每一行的开头都会有序号产生。如果遇不到'\n',那么就按输入的内容输出。

       但是我们有时候希望等所有内容都输出之后在逐行输出,那么这有应该怎么做呢?方法就是使用gets()函数和puts()函数。

       所以若想输出方式二:可采用如下代码

<span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#define LINE 50#define MAX 100int main(){char arr[LINE][MAX];                      //定义一个二维数组int i = 0;for ( i = 0; i < LINE; i++){gets(arr[i]);if (arr[i][0]=='\0')              //遇到空行跳出循环{break;}}for ( i = 0; arr[i][0]; i++)             //此处的条件也可以为arr[i][0]!='\0'{puts(arr[i]);}return 0;}</span>

       首先解释一下gets()函数,gets()函数在API中的定义是 char * gets(*buffer),在上面的代码中我们写入gets(arr[i])效果等同于gets(&arr[i][0]),我们将当前行的首地址作为参数传给gets()函数,返回值为参数buffer的首地址。当然gets()函数在遇到错误和内容结束时会返回一个空指针。 gets()函数在接收内容时会接收所有内容包括‘\n’,但是在存储的时候又会将'\n',转换为'\0'存储。等到调用puts()函数的时候又会将'\0'转化为'\n'之后进行输出。

       当然在条件中你也可以写成for(i = 0;i<LINE; i++),但是这样写的话如果下面不变那么就容易将许多空行也考虑进去,效率不好。






2 0
原创粉丝点击