科尼茨瓦
我正在做一些作业并准备期末考试,但我在这里被困了好几个小时,请帮助我
方阵 (nxn)
将 Even 元素写入 matran.txt,然后从文件中读取并显示在屏幕上
//this is function write down file matrix.txt, and it's work normally
void infile(int **p,int n)
{
bool a=false;
FILE *f=fopen("matran.txt","w");
if (f==NULL)
{
printf ("\nLoi file.");
exit(1);
}
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
if ((p[i][j]) % 2 == 0) {
fprintf (f,"%d\t",p[i][j]);
a=true;
}
}
if (a) printf ("\nFile da duoc ghi tai ./matrix.txt");
else printf ("\nKhong co so chan trong ma tran");
}
我知道它有
0->n
的限制,但我不知道i
的限制是什么,我尝试将限制设置为100,但它仍然打印出3个值,并且显示100个差异地址@_@
//but this didnt work
void DocTep(int **p, int n) {
int *ptr=(int*)malloc(n*sizeof(int));
FILE *f = fopen("matran.txt", "r");
if (f == NULL) {
printf("\nLoi file.");
exit (1);
}
for (int i = 0; i < n; i++) {
fscanf(f, "%d ",ptr[i]);
}
fclose(f);
printf ("\n");
for (int i = 0; i < n; i++) {
printf ("%d\t",ptr[i]);
}
}
这是完整的节目
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void nhapmt (int **p,int n)
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("a[%d][%d] = ", i, j);
scanf("%d", &p[i][j]);
}
}
}
void inmt (int **p,int n)
{
for (int i=0;i<n;i++)
{
printf ("\n");
for (int j=0;j<n;j++)
{
printf ("%d\t",p[i][j]);
}
}
}
void tongcheo(int **p,int n)
{
int sum=0;
for (int i=0;i<n;i++)
{
sum += p[i][i];
}
printf ("\nTong cac so tren duong cheo chinh la: %d",sum);
}
void tongh(int **p,int n,int h)
{
int sum=0;
for (int i=0;i<n;i++)
{
sum += p[i][h];
}
printf ("Tong cot %d la: %d",h,sum);
}
void infile(int **p,int n)
{
bool a=false;
FILE *f=fopen("matran.txt","w");
if (f==NULL)
{
printf ("\nLoi file.");
exit(1);
}
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
if ((p[i][j]) % 2 == 0) {
fprintf (f,"%d\t",p[i][j]);
a=true;
}
}
if (a) printf ("\nFile da duoc ghi tai ./matran.txt");
else printf ("\nKhong co so chan trong ma tran");
}
void DocTep(int **p, int n) {
int *ptr=(int*)malloc(100*sizeof(int));
FILE *f = fopen("matran.txt", "r");
if (f == NULL) {
printf("\nLoi file.");
exit (1);
}
// fscanf(f,"%d",&ptr[0]);
for (int i = 0; i < n; i++) {
fscanf(f, "%d ",ptr[i]);
}
fclose(f);
printf ("\n");
for (int i = 0; i < n; i++) {
printf ("%d\t",ptr[i]);
}
}
int main()
{
int **p,n,h;
printf ("Hay nhap vao n: ");
scanf("%d",&n);
p=(int**)malloc(n*sizeof(int*));
for (int i=0;i<n;i++){
p[i]=(int*)malloc(n*sizeof(int));
}
nhapmt(p,n);
inmt(p,n);
tongcheo(p,n);
printf ("\nHay nhap vao h: ");
scanf("%d",&h);
tongh(p,n,h);
infile (p,n);
DocTep(p,n);
free(p);
return 0;
}
阿里加图
在
DocTep
例程中,你不会提前知道需要阅读多少内容。 (那么n
参数是从哪里来的?)
如果您需要做的只是打印在
infile
中找到的偶数值,则无需担心管理 **p
的内存或存储这些值。您可以使用 while
循环,当到达文件末尾时终止(feof()
例程可以告诉您),或者使用 fscanf
的返回值来告知何时没有更多值可供读取.