2016-02-21 4 views
-2

Я написал фрагмент кода для нахождения непрерывной суммы, равной одному из предоставленных аргументов. неНазначение значений двумерному массиву в c

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

int main() 
{ 
    //number of test case 
    int n; 
    int monfri[2]; 

    scanf("%d",&n); 

    char res[n][3] ; 
    char yestok[3] = {"YES"}; 

    int sum = 0; 
    int h = 0; 

    for(int i = 0 ; i < n; i++) 
    { 
     h=0; 
     //read no of friends and money 
     while (h < 2 && scanf("%d", &monfri[h]) == 1) 
      h++; 

     int fri[monfri[0]]; 

     for(int j = 0; j < monfri[0]; j++) 
      scanf("%d",&fri[j]); 


     for(int k = 0; k < monfri[0] ; k++) 
     { 
      sum = 0; 

      for(int l=k+1; l<monfri[0]; l++) 
      { 
       sum = sum + fri[l - 1]; 

       if(sum == monfri[1]) 
       { 
        strcpy (res[i],yestok); 
        continue; 
       } 

       if(sum > monfri[i]) 
        continue; 
      } 
     }  

     if(strcmp(res[i],yestok) != 0) 
     { 
      strcpy (res[i],"NO");  
     } 

    } 

    for(int d = 0; d < n ; d++) 
    { 
     puts(res[d]); 
    } 

    return 0; 
} 

обеспечивает входной сигнал для того же

2 
5 12 
2 
3 
4 
5 
6 
3 15 
2 
2 
2 

Здесь первый входной представляет собой не тестового случая, в нашем случае его 2

следующий вход представляет фактическое нет данных и суммарного значения. здесь его

5 12 
3 15 

Ожидаемый результат должен быть

YES 
NO 

Но я получаю

YESNO 
NO 

Что плохого я сделал. Если нет тестового примера 1, то он работает нормально. но не удалось в 2 или более случаях.

+1

Вы пробовали отладку? Это вопрос «Пожалуйста, отлаживайте мою программу». – bolov

+0

@bolov Я пробовал, но не нашел. 'strcmp' и другие вещи прекрасны, кажется, и условия тоже в порядке. – Exhausted

+0

По крайней мере отладка будет сузить ваши подозрения от того, откуда исходит ошибка. – bolov

ответ

3

Строка «ДА» требует пространства в 4 символа. Таким образом, вы должны изменить декларацию yestok в

char yestok[4] = {"YES"}; 

или даже лучше, пусть компилятор определяет длину:

char yestok[] = {"YES"}; 

В противном случае, завершающий символ теряется и ваша программа вызывает неопределенное поведение. Например, вызов strcmp может завершиться неудачей.

+0

@MarthinZabel Спасибо за ваше объяснение, здесь 'strcmp', похоже, в порядке. Я получаю ожидаемые результаты. но, как вы сказали, из-за неопределенного поведения он на самом деле печатает, пока не получит «\ 0». Таким образом, я не мог понять это. – Exhausted

Смежные вопросы