如何在C中使用printf和scanf读写文件?

时间:2015-05-21 05:43:02

标签: c file printf scanf

一个小背景故事:几年前,我参加了算法竞赛。到那时,我正在学习C,我不知道如何使用常规方法编写或读取文件。

为了不让新的方法和语法感到困惑,一个C向导告诉我在include之后添加几行,并且presto,使用printf打印到屏幕并从键盘输入的任何程序使用scanf,会读取和写入在这些行中声明的单独文件。

这些代码只能在Windows中运行,因此我不知道它是否可移植。我不记得除了stdio.h,conio.h和stdlib.h之外还添加了包含。我在网上搜索了怎么做,但没有结果。任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

你基本上有三种选择。


选项I

当您启动程序时,在控制台中重定向stdin / stdout(这些是scanf读取的流和printf写入的内容)。在Windows和Linux上,可以这样做:

  • < in.txt - 将所有内容从stdin重定向到in.txt
  • > out.txt - 将所有对stdout的写入重定向到out.txt

你可以结合这些。例如,要从in.txt读取程序并写入out.txt,请在终端(命令行)中执行此操作:
myprogram < in.txt > out.txt


选项2

同样,您可以使用freopen在代码中重定向标准流。例如:

freopen("out.txt", "w", stdout);
freopen("in.txt", "r", stdin);

结果将与上面完全相同。


选项3

使用C的文件I / O:首先是fopen,然后是fscanffprintf

FILE* fIn, fOut;
fIn = fopen("in.txt", "r");
fOut = fopen("out.txt", "w");
// Here you should check if any of them returned NULL and act accordingly

然后您可以这样读写:

fscanf(fIn, "%d %d", &x, &y);
fprintf(fOut, "Some result: %d\n", result);

答案 1 :(得分:-1)

#include <stdio.h>
struct s
{
char name[50];
int height;
};
int main(){
    struct s a[5],b[5];   
    FILE *fptr;
    int i;
    fptr=fopen("file.txt","wb");
    for(i=0;i<5;++i)
    {
        fflush(stdin);
        printf("Enter name: ");
        gets(a[i].name);
        printf("Enter height: "); 
        scanf("%d",&a[i].height); 
    }
    fwrite(a,sizeof(a),1,fptr);
    fclose(fptr);
    fptr=fopen("file.txt","rb");
    fread(b,sizeof(b),1,fptr);
    for(i=0;i<5;++i)
    {
        printf("Name: %s\nHeight: %d",b[i].name,b[i].height);
    }
    fclose(fptr);
}