好的,我正在阅读一个看起来像这样的文本文件:
3 4
2 1 1 1
6 2 1 -7
-2 2 1 7
前两个数字是行数和列数。
然后我读入矩阵并想要将值分配给2D数组:
这是我的代码:
#include <stdio.h>
int main( int argc, char *argv[] ) {
FILE *inputFile;
char ele[256];
int rows,cols,i,j;
inputFile = fopen(argv[1], "r" );
if(inputFile == 0) {
printf("Can't open '%s'\n", argv[1]);
return 1;
}
fscanf(inputFile, "%d %d", &rows, &cols);
char *array[rows][cols];
for ( i = 0; i < rows; i++ )
{
for ( j = 0; j < cols; j++ )
{
fscanf(inputFile, "%s", ele);
array[i][j] = ele;
}
}
for ( i = 0; i < rows; i++ )
{
for ( j = 0; j < cols; j++ )
{
printf("array[%d][%d] = %s\n", i,j, array[i][j] );
}
}
return 0;
}
第一个嵌套循环从文本文件中读取并将元素分配给2D数组。
第二个循环打印出2D数组的所有元素。
现在,我的输出打印出2D数组的所有元素,但将它们全部显示为7(文本文件中的最后一个元素)。
如果我打印出来&#34; ele&#34;在第一个循环中,它正确打印出矩阵中的所有元素,只是它们不会逐个进入2D数组。
免责声明:我知道即使他们正在注意,我也会将其视为字符。这是故意的。
答案 0 :(得分:2)
有一些错误(小错误)。主要错误是与type
和format
的{{1}}字符串的fscaf
不匹配。您无法使用printf
读取数字数据,并希望它是数字数据。要阅读签名字符值,%s
和%hhd
都需要fscanf
。 printf
类型为ele
,而非char
。与char*
相同。但是,修复那些修复了从文件中读取和存储数字的文件。
array
<强>输出强>
#include <stdio.h>
int main (int argc, char *argv[])
{
if (argc < 2) {
fprintf (stderr, "error: insufficient input. usage: %s <file>\n", argv[0]);
return 1;
}
FILE *inputFile;
char ele;
int rows, cols, i, j;
inputFile = fopen (argv[1], "r");
if (inputFile == 0) {
printf ("Can't open '%s'\n", argv[1]);
return 1;
}
fscanf (inputFile, "%d %d", &rows, &cols);
char array[rows][cols];
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
fscanf (inputFile, "%hhd", &ele);
array[i][j] = ele;
}
}
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
printf ("array[%d][%d] = %hhd\n", i, j, array[i][j]);
}
}
return 0;
}
答案 1 :(得分:1)
按照目前的情况,您要将array
中的每个元素(每个元素都指向char
)指定为ele[0]
的地址,这就是为什么它们是所有打印出来都是您读入ele
的最后一个字符串。他们都指向同一个字符串。
编辑:误解了你的内容,重新回复了我的回复。抱歉'回合那个。
答案 2 :(得分:0)
而不是:
std::advance(it, a.size());
这样做:
static void Main(string[] args)
{
Console.Title = "Quadrado Mágico";
Console.BackgroundColor = ConsoleColor.DarkCyan;
Console.Clear();
Console.ForegroundColor = ConsoleColor.DarkBlue;
Random ran = new Random();
Console.Clear();
const int f = 3;
const int c = 3;
int[,] quadrado = new int[f, c]
{
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}
};
for (int fila = 0; fila < f; fila++)
{
for (int coluna = 0; coluna < c; coluna++)
{
Console.WriteLine(quadrado[fila, coluna] + "\t");
}
Console.WriteLine();
}
Console.ReadKey();
}
strdup分配内存,所以在程序结束时你必须释放那个内存。 我假设你想继续使用字符串,即char数组来存储值。 如果这不是一项要求,您可以使用不需要strdup的不同解决方案。