2013-10-13 2 views
-8

Я хотел бы спросить вас о моей программе. Основная цель этого состоит в том, чтобы заполнить массив «результат» с помощью сбора данных из массивов «tab1» и «tab2». Может ли кто-нибудь проверить, почему результаты настолько странные? Спасибо.Странные результаты в c

#include <stdio.h> 
#include <stdlib.h> 

void laczenie(char tab1[],char tab2[]) 
{ 
int i; 
char* result =(char*) malloc(100*sizeof(char)); 

for(i=0;i<30;i++) 
{ 
    if(tab1[i] != '\0') tab1[i]==result[i]; 
    else if (tab2[i] !='\0')tab2[i]==result[i]; 
    else printf(" "); 

} 
for(i=0;i<30;i++)printf("%c",result[i]); 
free(result); 
} 


int main() 
{ 
char x[10]={'n','a','p','i','s','1'}; 
char y[10]={'n','a','p','i','s','2'}; 
//char x[10] = {"napis1"}; 
//char y[10] = {"napis2"}; 
laczenie(x,y); 

return 0;} 
+0

Что такое «странно» – littleadv

+1

Что вы ожидали? Что на самом деле произошло? – moonshadow

+0

вы никогда не назначаете ничего для результата! 'Tab2 [i] == result [i]' проверяет только, если значение одинаково! –

ответ

3

В дополнение Тион для LihOs ответа выше этого блока выглядит неправильно:

if(tab1[i] != '\0') 
    tab1[i]==result[i]; 
else if (tab2[i] !='\0') 
    tab2[i]==result[i]; 
else printf(" "); 

Не значит присвоить значение в tab1[i] или tab2[i] к result[i], как это?

if(tab1[i] != '\0') 
    result[i] = tab1[i]; 
else if (tab2[i] !='\0') 
    result[i] = tab2[i]; 
else printf(" "); 

Кроме того, используя magic numbers как в петлях: for(i=0;i<30;i++) довольно плохая практика, вероятно, вы должны использовать константу для значения размера (который можно затем использовать в обоих циклах и в декларациях массива А почему. петля 30, когда массивы 10 элементов только?

+0

Думаю, это настоящая проблема. Он никогда не присваивает ничего массиву результатов. –

3

В функции вы проверить на нуль-символ завершения:

if(tab1[i] != '\0') 

но где нуль-символ завершения здесь?

char x[10]={'n','a','p','i','s','1'}; 

Try:

char x[7]={'n','a','p','i','s','1','\0'}; 

Также отметим, что tab1[i]==result[i]; сравнивает tab[1] с result[i], если вы хотите назначить result[i] к tab1[i], оператор присваивания использование = в:

tab1[i]=result[i]; 
+0

И что такое tab1 [i] ** == ** result [i]; имею в виду? Я думаю, это должно быть tab1 [i] ** = ** result [i]; – BillHoo

+0

@billhoo: Хорошо замечен :) – LihO

0
if(tab1[i] != '\0') 
result[i] = tab1[i]; 
else if (tab2[i] !='\0') 
result[i] = tab2[i]; 
else printf(" ");` 

Это по-прежнему не так, как к тому времени, вы назначаете TAB2 привести я уже буду в 6 так что вам придется использовать два для петель я полагаю для правопреемника tab1 и tab 2

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