我一直在尝试将矩阵输入存储在数组中的txt文件中,但它向我显示: 这是代码
#include <stdio.h>
int main()
{
int c, i, j, row, col, nl, cr;
row = col = nl = cr = 0;
FILE *fp = fopen("g.txt", "r");
// Figure out how many rows and columns the text file has
while ((c = getc(fp)) != EOF)
{
if (c == '\n')
nl++;
if (c == '\r')
cr++;
col++;
if (c == '\n')
row++;
putchar(c);
}
col = (col - (nl + cr));
col = (int) (col/row);
// printf("\nnumber of rows is %d\n", row);
// read letters into array
char array[row][col];
if ( fp )
{
for ( ;; )
{
c = getc(fp);
if ( c == EOF )
{
break;
}
if ( c != '\n' && c != '\r' )
{
array[i][j] = c;
if ( ++j >= col )
{
j = 0;
if ( ++i >= row )
{
break;
}
}
}
}
fclose(fp);
}
for ( i = 0; i < row; i++ )
{
for ( j = 0; j < col; j++ )
{
putchar( array[i][j]);
}
putchar('\n');
}
return 0;
}
请问有人有什么想法吗?
例如txt文件:
255 50 9 50 1 50 50 1
50 255 50 50 50 50 50 50
50 50 255 50 50 50 50 50
8 50 50 255 50 50 50 50
50 50 50 50 255 50 50 50
50 50 50 50 50 255 50 50
1 50 50 50 50 50 255 50
2 50 50 50 50 50 50 255
我的节目告诉我这个:
255 50 9 50 1 50 50 1
50 255 50 50 50 50 50 50
50 50 255 50 50 50 50 50
8 50 50 255 50 50 50 50
50 50 50 50 255 50 50 50
50 50 50 50 50 255 50 50
1 50 50 50 50 50 255 50
2 50 50 50 50 50 50 255 $■( 1gÍuáþ09■ ı¤ıu"ÒávD ê$[
► ð²( ♥ l ► ■
ê$[ ♥ l ²( O»ƒv[ 4■( Qõá
v♥ #õáv┬²║Oÿ|®v ñ|®ve┬ív
■( x■( ÿ|®v Ó²⌂ @■( áƒv╚♀[ L
■( w¯ƒv‼ ê■( I┴ávÿ|®v↓┴áv~²║O
Ó²⌂ \■( ■ ─ ( e┬ívÍ┬29►☺
对于输入文件,它显示的是好的,但问题是数组输出我不会动摇,为什么它会告诉我这个caracters
答案 0 :(得分:3)
你永远不会改变j,它总是保持为0,所以你正在写每个位置a [i] [0]。的atoi(线);将仅转换行中的第一个数字。这就是你的程序只存储第一列的原因。
解决此问题的可能方法如下:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i=0,totalNums,totalNum,j=0;
size_t count;
int numbers[100][100];
char *line = malloc(100);
FILE *file; /* declare a FILE pointer */
file = fopen("g.txt", "r"); /* open a text file for reading */
while(getline(&line, &count, file)!=-1) {
for (; count > 0; count--, j++)
sscanf(line, "%d", &numbers[i][j]);
i++;
}
totalNums = i;
totalNum = j;
for (i=0 ; i<totalNums ; i++) {
for (j=0 ; j<totalNum ; j++) {
printf("\n%d", numbers[i][j]);
}
}
fclose(file);
return 0;
}
该代码将读取整行,然后逐个数字地解析,直到没有更多的数字为止。
我真的不明白输入应该是整数还是双精度,请注意你声明了一个二维的二维数组但是你调用了atoi()。我发布的代码假定它是整数,但是请确保将数组更改为2D数组(或者如果它们确实是双精度数,则更改sscanf中的格式字符串)。
答案 1 :(得分:1)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main(void)
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
const char *s = " ";
char *token = NULL;
int i = 0;
double arr[200];
int j;
fp = fopen("g.txt", "r");
if (fp == NULL)
{
printf("Error opening");
exit(EXIT_FAILURE);
}
while ((read=getline(&line, &len, fp)) != -1)
{
token = strtok(line, s);
while(token != NULL)
{
arr[i] = atoi(token);
printf("%f\n", arr[i]);
token=strtok(NULL,s);
i++;
}
}
exit(EXIT_SUCCESS);
return 0;
}
getline
将逐行读取文件,strtok
将根据空格拆分条目,并将单独存储在数组中。单维数组也足以存储值。