Почему выходной файл не совпадает с вводом переменной? - PullRequest
0 голосов
/ 29 марта 2019

Я создаю программу, которая запрашивает raw и столбцы, после чего просит вас поместить числа в размерный массив.Это массив входов в файл.Когда я открываю файл, я не вижу массив.

#include <stdio.h>
#include <stdlib.h> 
#include <curses.h>

int main () {
FILE *fp;
int n,m;
int i,j;
float b;
char filename[100];
int getfloat(float *);

printf("Number of rows\n");
scanf("%d",&n);
printf("Number of colums\n");
scanf("%d",&m);
float s[n][m];

for (i=1;i<=n;i++)
{
   for (j=1;j<=m;++j) 
   {
       printf("Insert number %d",i);
       printf(",%d\n", j);
       scanf("%f",&b);
       s[i][j]=b;
    }
}          

printf("Enter file name \n");
scanf("%s", filename);

// ****print file****
fp=fopen(filename,"w+");
if(fp!=NULL)
{
   fputs(s,fp);
   fprintf("%c",s);
}
fclose(fp);

return 0;

Единственное, что я вижу, это

Invalid Characters

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Если вам нужен список чисел, возможно, в какой-то сетке в файле, то как минимум вы хотите цикл, такой как:

for (int i=0; i<n; ++i)
{
    for (int j=0; j<m; ++j)
    {
        fprintf(fp, "%f ", s[i][j]);
    }
    fprintf(fp, "\n");
}

См. fprintf для документации по спецификаторам формата; вы, вероятно, захотите изменить это, чтобы получить более привлекательные значения.

Также, опять же, обратите внимание, что массивы начинаются с 0. Ваш начальный цикл чтения пропускает самый первый элемент и записывает после конца фактического массива.

0 голосов
/ 29 марта 2019

fprintf("%c", s); и fputs не распечатывает содержимое массива, оно распечатывает местоположение, сохраненное в указателе массива, и пытается интерпретировать его как символ.Чтобы вывести на печать правильные значения, вам нужно перебрать каждое значение и использовать fprintf с каждым float значением, используя s[i][j] аналогично тому, как вы его инициализировали.

Способ инициализациимассив также отключен, так как массивы начинаются с 0, а не с 1. В настоящее время ваш цикл for никогда не обращается к s[0][0] или s[1][0] и так далее.Ваши циклы for должны иметь i, инициализированные в 0, и иметь условие i < n вместо i<=n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...