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

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

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

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

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

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

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

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

#define _CRT_SECURE_NO_WARNINGS
#include
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;
}
注:输入一行后,按回车输出一行。其中的For_Switch变量相当于一个起到开关作用的变量。每次遇到'\n'之后,开关

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

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

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

#define _CRT_SECURE_NO_WARNINGS
#include
#define LINE 50
#define MAX 100
int 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;
}

       首先解释一下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






你可能感兴趣的:(C语言设计)