Java和C++的標準輸出流重定向

0. 概要

本文記錄一下 Java和C++的標準輸出流重定向。

1. Java

輸入文件-> D:\\TerminalInput\\student.txt

5
huhu 5
haha 3
xixi 5
hengheng 2
gaoshou 8
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String INPUT = "D:\\TerminalInput\\student.txt";
        String OUTPUT = "D:\\TerminalInput\\student_out.txt";
        FileInputStream instream = null;
        PrintStream outstream = null;
        try {
            instream = new FileInputStream(INPUT);
            outstream = new PrintStream(new FileOutputStream(OUTPUT));
            System.setIn(instream);
            System.setOut(outstream);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            System.out.println(sc.nextLine());
        }

        System.out.println("Done1"); // "Done1" 寫入文件中
        System.err.println("Done2"); // "Done2" 作爲錯誤日誌, 只打印,不會寫到文件中
    }

}

輸出文件-> D:\\TerminalInput\\student_out.txt

5
huhu 5
haha 3
xixi 5
hengheng 2
gaoshou 8
Done1

2. C Plus Plus

C++
還是上面的輸入數據 student.txt
現在根據學生的分數大小,從大到小進行排序。
這裏寫圖片描述

#include <iostream>

using namespace std;

//創建一個結構體,用來存儲學生的姓名和分數
struct student{
    char name[21];
    int score;
};

int main(int argc, char *argv[])
{
    struct student s[100], temp;
    int i,j, n ;

    freopen("D:\\TerminalInput\\student.txt", "r", stdin);
    freopen("D:\\TerminalInput\\student_sort_by_score.txt", "w", stdout);

    scanf("%d", &n);

    for(i=0; i< n; i++){
        scanf("%s %d", &s[i].name, &s[i].score);
    }

//    for(int k=0; k< n; k++){
//        printf("%s %d ", s[k].name, s[k].score);//
//    }

//    cout<< endl;

    //分數從高到低排列
    for(i=1; i<n; i++){
        for(j=0; j< n-i; j++){
            if(s[j].score < s[j+1].score){
                temp = s[j];
                s[j] = s[j+1];
                s[j+1] = temp;
            }
        }
    }

    for(int k=0; k<n; k++)
        printf("%d %s\n", s[k].score, s[k].name);

    fclose(stdin);//關閉輸入流
    fclose(stdout);//關閉輸出流

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章