一个小背景故事:几年前,我参加了算法竞赛。到那时,我正在学习C,我不知道如何使用常规方法编写或读取文件。
为了不让新的方法和语法感到困惑,一个C向导告诉我在include之后添加几行,并且presto,使用printf打印到屏幕并从键盘输入的任何程序使用scanf,会读取和写入在这些行中声明的单独文件。
这些代码只能在Windows中运行,因此我不知道它是否可移植。我不记得除了stdio.h,conio.h和stdlib.h之外还添加了包含。我在网上搜索了怎么做,但没有结果。任何想法如何实现这一目标?
答案 0 :(得分:1)
你基本上有三种选择。
当您启动程序时,在控制台中重定向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
同样,您可以使用freopen
在代码中重定向标准流。例如:
freopen("out.txt", "w", stdout);
freopen("in.txt", "r", stdin);
结果将与上面完全相同。
使用C的文件I / O:首先是fopen
,然后是fscanf
和fprintf
:
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);
}