Больше вывода, чем нужно в массиве строк - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь решить проблему.Вы можете игнорировать проблему в коде.Я сомневаюсь, что если я принимаю значение t как 2, массив все равно выводит 3 строки, хотя я запускаю цикл только t раз для вывода.

#include<stdio.h>
#include<string.h>

int main(void){
  int t;
  int i;
  int j;
  int n;
  int c;
  int temp;
  char result[30][3];
  int flag;
  scanf("%d", &t);
  for(i = 0; i < t; i++){
    flag = 0;
    scanf("%d", &n);
    scanf("%d", &c);
    for(j = 0; j < n; j++){
      scanf("%d", &temp);
      if(c > temp){
      c = c - temp;
    } else{
      flag = 1;
    }
    }
    if(flag == 0){
      strcpy(result[i], "Yes");
    } else{
      strcpy(result[i], "No");
    }
  }

  for(i = 0; i < t; i++){
    printf("%s", result[i]);
  }
}

1 Ответ

1 голос
/ 25 сентября 2019

Добавьте \n, когда вы printf a result[i], тогда вы обнаружите, что вы на самом деле выводите 2 строки.Например, , если вы сначала strcpy(result[0], "Yes"), а затем strcpy(result[0], "No"), вы получите следующие выходные данные:

Да Нет

Нет

Фактически, хранилище result выглядит следующим образом:

result [0]: ['Y'] ['e'] ['s']

result [1]: ['N'] ['o'] ['\ 0']

Вы получаете "YesNo", когда вы выводите result[0], поскольку двумерный массив хранится непрерывно впамять и строка заканчиваются на \0.

. В качестве другого примера, если вы strcpy(result[0], "Hello"), то при выводе result[0] вы получите

Hello

и при выводе result[1] вы получите

lo

Поскольку хранилище в result выглядит следующим образом:

результат [0]: ['H'] ['e'] ['l']

результат [1]: ['l'] ['o']['\ 0']

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