2 jiankeabcd jiankeabcd 于 2016.05.11 15:10 提问

c语言 设计一个输出stdout和stderr的程序

一行输入一个无符号整数,作为stdout输出。
将不符合这个形式的输入除去 并作为stderr输出。
输入例
1
2

3 4
5 6 7
8
输出例(stdout)
1
2
8
输出例(stderr)
3 4
5 6 7
不知道该怎么办。。。我们连stdout stderr是什么怎么控制都没学过
求大神解答

2个回答

herozhangbz
herozhangbz   2016.05.11 22:51
已采纳

楼上大神写的挺好的,但是我发现一个问题,他的程序只是形似神不似。这个要判断当前输入行是否是无符号整数而不是0-9的整数,当你输入12这个整数时他会分到err里面,其实并不是这样的。我稍微修改一下给楼主参考。

     int iszs(char a[])
    {
        int ck=1;
        int i=0;
        for(i;i<strlen(a);i++)
            if(a[i]==' ')
            {
                ck=0;
                break;
            }
        return ck;
    };
        int main()
    {
    char out[10][10];
    char err[10][10];
    char buf[10];
    char str[10];
    int i=0,j=0,m;
    while(gets(buf))
    {
        if(iszs(buf))
        {
            strcpy(out[i], buf);
            i++;
        }else
        {
            strcpy(err[j], buf);
            j++;
        }
    }
    printf("stdout:\n");
    for(m=0;m<i;m++)
        printf("%s\n",out[m]);
    printf("stderr:\n");
    for(m=0;m<j;m++)
        printf("%s\n",err[m]);
        getch();
        return 0;
    }
qq423399099
qq423399099   Ds   Rxr 2016.05.11 16:36

写了个楼主可以参考下

 #include<stdio.h>
#include<string.h>

#define MAX_LINE 10

int main()
{
    char right_arr[MAX_LINE][32],wrong_arr[MAX_LINE][32];
    int i, flag, a = 0, b = 0;
    char buffer[32];
    while(gets(buffer))
    {
        for(i = 0,flag=1; i < strlen(buffer); i++)
        {
            if(buffer[i] <= '0' || buffer[i] >= '9')
            {
                flag = 0;
                break;
            }   
        }
        if(flag)
            strcpy(right_arr[a++], buffer);
        else
            strcpy(wrong_arr[b++], buffer);

    }

    //打印stdout
    printf("stdout:\n");
    for(i = 0; i < a; i++)
        printf("%s\n", right_arr[i]);

    //打印stderr
    printf("stderr:\n");
    for(i = 0; i < b; i++)
        printf("%s\n", wrong_arr[i]);
}

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
stdout和stderr标准输出的区别
stderr和stdout详细解说 今天又查了一下fprintf,其中对第一个参数stderr特别感兴趣。 int fprintf(FILE *stream,char *format,[argument]); 在此之前先区分一下:printf,sprintf,fprintf。 1,printf就是标准输出,在屏幕上打印出一段字符串来。 2,sprintf就是把格式化的数据写入到某个字
c语言stdout,stdin,stderr缓冲问题
问题背景 这个c语言中,对于输入输出流的缓冲问题我是早就知道的。但是以前对输入流关注的较多,没想到今天因为输出流,害的师兄们找了一天,我也帮忙找了一下午才找出来。 问题来源 师兄有个C语言程序,程序前面输出一堆东西(绝对没有错),后面很复杂,调试时出现了段错误(segment error)。 如果直接运行这个程序输出会显示出来,然后出现段错误。 但是一旦要重定向到一个文件里面,前面
第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)
4.4 显示数据 4.4.1 标准文件描述符          Linux系统将每个对象当作文件处理。这包括输入和输出过程。Linux使用文件描述符(file descriptor)标识每个文件对象。文件描述符是一个非负整数,可以唯一地标识会话中打开的文件。每个进行最多可以有9个打开文件的描述符。bash shell为特殊需要保留前3个文件描述符(0,1,2),如下所示:
C++ stderr/stdout 重定向到文件
通常,stderr和stdout被用来输出内容显示到控制台,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅。最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件。文章先说明C/C++如何重定向 stderr/stdout 到文件,同时也说明stderr与stdout的主要区别,以及如何转变stderr /stdout 的缓冲类型。
stdout和stderr重定向
stdout和stderr的重定向C语言中对应于显示器的指针有两个:stdout和stderr。书上说,对于前者,信息输出时总是先送入缓冲区(行间缓存),然后再输出到屏幕;而对后者,信息是不经过缓冲区直接输入到屏幕的。因此,向stdout输出的信息是可以被重定向的,输出到stderr的信息则不能被重定向。但是我认为输出到stderr的信息也是可以被重定向的。下面举例说明:#include <stdi
验证daemon程序中setsid的作用以及重定向stdin、stdout、stderr的原因
daemon程序包括第一次fork、setsid、第二次fork、改变工作目录、关闭所有打开的描述符以及重定向stdin、stdout、stderr。 setsid发挥的作用是使得当前进程成为新会话的会话头进程以及新进程组的进程组头进程,从而不再有控制终端。 将stdin、stdout和stderr重定向到/dev/null,其中一个原因是打开正常文件占用这些描述符时,诸如perror等之类函
C语言中stdout
标准输出设备的文件句柄宏定义 printf其实就是fprintf的第一个参数设置为stdout 你可以理解为它就是一个文件,而这个文件和标准输出设备(屏幕)建立了某种关联,当数据写到这个文件里面的时候,屏幕就会通过既定的方式把你写进去的东西显示出来
关于输入输出(stdin、stdout、stderr)
启动一个C语言程序时,操作系统环境负责打开三个文件,并将这3个文件的指针提供给该程序。这3个文件分别为标准输入(stdin)、标准输出(stdout)、标准错误(stderr)。它们在中声明,大多数环境中,stdin指向键盘,stdout、stderr指向显示器。之所以使用stderr,若因某种原因造成其中一个文件无法访问,相应的诊断信息要在该链接的输出的末尾才能打印出来。当输出到屏幕时,这种处理
linux下的stdin,stdout和stderr理解
玩linux的时候经常会看到stdin,stdout和stderr,这3个可以称为终端(Terminal)的标准输入(standard input),标准输出( standard out)和标准错误输出(standard error)。 通过man stdin查看手册,可以看到它们都是在stdio.h中定义的。 当linux开始执行程序的时候,程序默认会打开这3个文件流,这样就可以对终端进行
详解stdin,stdout,stderr
我们在写C程序是老是