Как правильно написать файл в C? - PullRequest
0 голосов
/ 29 января 2019

Я изучаю основы программирования на C, и у меня есть проблемы с упражнением по записи в файл.Проблема состоит в том, чтобы записать квадратную матрицу в файл, но следующим образом: первые два числа в каждой строке должны быть разделены ",", а затем написать оставшиеся числа отдельно.

Это довольно простоупражнения, но я только учусь, я оставляю свой код, который имеет некоторые недостатки.Я надеюсь, что вы можете мне помочь.

#include <stdio.h>
int main(){
FILE *data;
int matrix[4][4] = {
    {1,2,3,4},
    {2,3,5,6},
    {9,8,4,5},
    {5,3,1,2}
};
data = fopen("output.txt","w");
for (int i = 0; i < 4; ++i)
{
    for (int j = 0; j < 4; ++j)
    {   
        if(matrix[i][0]>=0&&matrix[i][j+1]<4)
        {
        fprintf(data, "%d,%d ",matrix[i][j],matrix[i][j+1]);
        }
        else
            fprintf(data, "%d ",matrix[i][j]);
    }
    fprintf(data, "\n");
    }
   fclose(data);
 return = 0;
 }

Я знаю, что моей большой ошибкой является условие предложения if, но я не знаю, как правильно написать это для этого случая.

Я хочу получить этот вывод:

1,2 3 4
2,3 5 6
9,8 4 5
5,3 1 2

Как я могу исправить предложение if или сделать что-то другое, чтобы получить этот вывод?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Есть два способа получить то, что вы хотите.

Самый очевидный способ - просто выдать все 4 значения одновременно:

for (int i = 0; i < 4; ++i) {
    int i0 = matrix[i][0];
    int i1 = matrix[i][1];
    int i2 = matrix[i][2];
    int i3 = matrix[i][3];

    fprintf(data, "%d,%d %d %d\n", i0, i1, i2, i3);
}

Другой способ -используйте условные выражения, основанные на значениях j, , а не на matrix[i][j].Есть три возможных способа печати до / после значения:

  1. Ничего / Новая строка
  2. Запятая
  3. Пробел

ИтакВы можете проверить, какое значение j вы имеете, и напечатать соответствующую строку ( не символ, потому что «ничто» не символ, а "" - строка «ничто»).

for (int i ...
    for (int j = 0; j < 4; ++j) {
        const char * before = "";

        if (j == 1) before = ",";
        if (j > 1) before = " ";

        fprintf(data, "%s%d", before, matrix[i][j]);
    }
    fprintf(data, "\n");
}

По мере того, как вы становитесь более уверенным, вы можете инициализировать строку before троичным выражением.

Вместо этого вы также можете использовать строку "после", которая устранит лишние fprintf(data, "\n") после цикла.

0 голосов
/ 29 января 2019

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

Также в своем заявлении на возврат вы указываете значение для возврата, следовательно: return 0;вы не можете присвоить возвращаемое значение

Надеюсь, это поможет, я сделал это с помощью printf, а затем изменил его обратно на fprintf, чтобы могла быть ошибка, с которой вам, возможно, придется исправить

#include <stdio.h>

int main(){

    FILE *data;
    int matrix[4][4] = {
        {1,2,3,4},
        {2,3,5,6},
        {9,8,4,5},
        {5,3,1,2}
    };
    data = fopen("output.txt","w");

    for (int i = 0; i < 4; ++i)
    {
        fprintf(data, "%d,", matrix[i][0]);
        for (int j = 1; j < 4; ++j)
        {   
            fprintf(data, "%d ", matrix[i][j]);
        }
        fprintf(data, "\n");
    }
    return 0;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...