Сохранение пары чисел каждый раз в одномерном массиве в C - PullRequest
0 голосов
/ 17 марта 2019

Я новичок в C. У меня проблемы с этой функцией массива. Когда я вызываю функцию, она каждый раз запрашивает ввод пары чисел (ключ, значение) и сохраняет ее в одномерном массиве. Мне придется хранить пару по одному, постоянно вызывая функцию. Ниже приведено то, что у меня есть в настоящее время, и я думаю, что храню его неправильно

edit: извините, заметил, насколько плох мой вопрос. Я думаю, что я не храню это правильно, так как, когда я вызываю другие функции, такие как сумма (суммирование значений), я получаю 0 или неправильный ответ. Кроме того, обновлен код для включения основной функции для получения дополнительной информации. Размер массива ограничен 100.

#define SIZE 100
int main(void) {
int arr[SIZE] = {0};

void insert_table(int arr[], int length) {
    int i;
    for (i=0; i<SIZE; i=i+2){
        scanf("%d", &arr[i]);
        scanf("%d", &arr[i+1];
        break;
    }

1 Ответ

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

В

void insert_table(int arr[], int length) {
    int i;
    for (i=0; i<SIZE; i=i+2){
        scanf("%d", &arr[i]);
        scanf("%d", &arr[i+1];
        break;
    }

у вас есть несколько проблем:

  • останов остановка вашего цикла после того, как вы (попытаетесь) ввести два значения, это, вероятно, не то, что вы хотели сделать

  • вы не проверяете результат scanf , поэтому вы не обнаруживаете ни EOF, ни неверный ввод

  • вы полагаете, РАЗМЕР четный, если нечетный, вы будете писать из обр. с неопределенным поведением

Возможно также длина - это количество записей в обр. , для которых не нужно использовать РАЗМЕР в insert_table

Чтобы вернуть количество записей, поможет звонящему в случае EOF / ошибка, если не все записи не установлены

Лучшее определение:

size_t insert_table(int arr[], size_t length) {
  size_t i;

  for (i = 0; i < length - 1; i += 2){
    if ((scanf("%d", &arr[i]) != 1) ||
        (scanf("%d", &arr[i+1]) != 1))
      return i;
  }

  return i;
}

Если я добавлю это главное:

#define SIZE 100

int main()
{
  int arr[SIZE];
  size_t n = insert_table(arr, SIZE);

  for (size_t i = 0; i != n; i += 2) {
    printf("%d %d\n", arr[i], arr[i + 1]);
  }
}

Компиляция и исполнение:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out
1 2 3 4 a
1 2
3 4
pi@raspberrypi:/tmp $ echo "1 2 3 4" | ./a.out
1 2
3 4
pi@raspberrypi:/tmp $ echo "1 2 3 4 5" | ./a.out
1 2
3 4
pi@raspberrypi:/tmp $ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...