gpt4 book ai didi

c - C 中整数行的结尾

转载 作者:行者123 更新时间:2023-11-30 19:15:48 27 4
gpt4 key购买 nike

我必须从C语言的文本文件中读取一个未定义的矩阵,并且我想逐行读取它,以便每一行都是一个整数数组。但是我如何知道一行的末尾在哪里,因为我不能使用“\n”作为字符?这是代码:

#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"

using namespace System;

typedef struct
{
int *v;
int n;
}vector;



int main(array<System::String ^> ^args)
{
vector *a;
FILE* f;
int n = 15;
int i = 0;
int j,k;
if ((f = fopen("C:\\Users\\Mirelaa\\Documents\\visual studio 2013\\Projects\\MatriceNedefinita\\MatriceNedefinita\\Debug\\fisier2.in", "rt")) == NULL)
{
printf("Fisierul nu poate fi deschis!");
exit(1);

};

a = (vector *)malloc(n * sizeof(vector));

while (!feof(f))
{
a[i].v = (int*)malloc(n * sizeof(int));
a[i].n = 0;
//citeste rand
//citesti fiecare element din rand
j = 0;
while (a[i].v[j] != '\0')// wrong!!

{
fscanf(f, "%d", &a[i].v[j]);
j++;
a[i].n = a[i].n + 1;
}
for (k = 0 ; k < a[i].n ; k++)
{
printf("%d", a[i].v[j]);
printf("\n");
}
i++;
if (i == n)
{
n = 2 * n;
a = (vector *)realloc(a, n * sizeof(vector));
a[i].v = (int *)realloc(a[i].v, n * sizeof(int));
}
}
return 0;
}

最佳答案

读取一行整数并保存在可变大小的数组中是一种方法。

fscanf(f, "%d",... 的问题在于它首先读取空格,并且代码会丢失 '\n' 的出现.代码需要通过其他方式查找它。

但是不要将所有代码打包在 main() 中,而是考虑辅助函数。以下 C 函数读取一行数字,并在 1) 内存不足、2) 无数据或转换失败且未读取数字时返回 NULL。否则返回 vector 。它不限于任何行长度。

typedef struct {
int *v;
size_t n;
} vector;

vector *Read_vector(vector *v1, FILE *inf) {
v1->v = NULL;
v1->n = 0;
size_t size = 0;
for (;;) {
int number;
int ch;
// Check leading white-space for \n
while (isspace(ch = fgetc(inf))) {
if (ch == '\n') break;
}
if (ch == '\n' || ch == EOF) break;
ungetc(ch, inf);
if (1 != fscanf(inf, "%d", &number)) {
break;
}
// Is `v1` large enough?
if (v1.n >= size) {
size = size*2 + 1;
vector nu;
nu.v = realloc(v1->v, size * sizeof *nu.v);
if (nu.v == NULL) {
free(v1->v);
v1->v = NULL;
v1->n = 0;
return NULL;
}
v1->v = nu.v;
}
v1.v[v1.n++] = number;
}
if (v1->n == 0) {
return NULL;
}
return v1;
}

通过重复调用,可以得到一个 vector 数组。将其留给 OP,因为它与上面非常相似。

注意:避免使用 while (!feof(f))

关于c - C 中整数行的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31842189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com