EOF и свободная часть неиспользуемого 2d массива - PullRequest
2 голосов
/ 29 марта 2019

Мой фон - java, поэтому я еще не привык к синтаксису c.

Мне нужно сделать следующее: позволить пользователю ввести число k (количество строк) и после вставитьзначения в массив 2d с этой формой:

1  2
3  4
5  6

т.е. два значения с пробелом между ними и затем новая строка для новой строки.Если пользователь ввел k=1000, но ввел только 4 строк, то вызов функции был бы только для массива с 4 строками, а не 100. Цикл, который считывает значения, должен остановиться, если: есть k строк или Достигнув EOF

Мои вопросы:

  1. Я не знаю, как реализовать часть EOF.
  2. Я не знаю, как реализовать это для k = 1000 и там только 4 строки, поэтому вызываем функцию с массивом, который содержит только 4 строки

Вот мой код:

#include <stdio.h>
#define COLS 2
void foo(int** rows, int n);
int main()
{

    int k;
    printf("Please enter number of rows\n");
    scanf_s("%d", &k);

    int** matrix = (int**)malloc(k * sizeof(int*));
    for (int i = 0; i < k; i++)
        matrix[i] = (int*)malloc(COLS * sizeof(int));

    int num1, num2;
    for (int i = 0; i < k||num1!=EOF; i++)
    {

        printf("Enter two numbers separated by space \n");
        scanf_s("%d  %d", &num1, &num2);
        matrix[i][0]=num1;
        matrix[i][1] = num2;
    }

    printf("The array:: \n");
    for (int i = 0; i < k; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            printf("%d \t",matrix[i][j]);
        }
        printf("\n");
    }
    foo(matrix, k);
    for (int i = 0; i < k; i++)
    {
        free(matrix[i]);
    }
    free(matrix);
    return 0;
}

void foo(int** rows, int n)
{
    //some stuff
}

Ответы [ 2 ]

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

Измените нижнюю часть вашего кода:

for (int i = 0; i < k||num1!=EOF; i++)
{

    printf("Enter two numbers separated by space \n");
    scanf_s("%d  %d", &num1, &num2);
    matrix[i][0]=num1;
    matrix[i][1] = num2;
}

Кому:

int i;
for (i = 0; i < k; i++)
{

    printf("Enter two numbers separated by space \n");
    if(2 !=  scanf_s("%d  %d", &num1, &num2)) break;
    matrix[i][0]=num1;
    matrix[i][1] = num2;
}
k = i;

Надеюсь, что это будет работать, как вы хотите

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

проверьте возвращаемое значение scanf

for (int i = 0; i < k; i++)
{
    printf("Enter two numbers separated by space \n");
    if(scanf_s("%d  %d", &num1, &num2)==EOF)
        break;
    matrix[i][0]=num1;
    matrix[i][1] = num2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...