2016-03-31 4 views
0
#include <stdio.h> 
#include <wchar.h> 
#include <stdlib.h> 
#define NR 5 
#define NC 6 
#define NCC 30 
void cc(char arr[][NC],int locations[][2],char ch,int *num); 
int main(){ 
FILE *fPtr; 
char linStr[NC+1]; 
char a[NR][NC]; 
int loc[NCC][2]; 
char ch; 
    int i,j,num; 

printf("lab 4(b) solution by <NAME>\n"); 


if((fPtr = fopen ("/home/unersame/Desktop/data.dat","r")) == NULL){ 
    printf("file data.dat could not be opened\n"); 
}else{ 
    /* file processing follows */ 

    for(i=0;i<NR;i++){ 
     //fscanf(fPtr, "%c\n",linStr); 



     for(j=0; j<NC; j++){ 
fscanf(fPtr, "%c",&linStr[j]);   
j<NC?a[i][j]=linStr[j]:0; 


} 
    } 
    printf("Character array is:\n"); 
     for(i=0;i<NR;i++){ 
    for(j=0; j<NC; j++){ 

      printf("%c", a[i][j]); 
    } 

     } 
puts(""); 
     printf("Enter character to search for\n"); 
     scanf("%c",&ch); 
     cc(a,loc,ch,&num); 
     printf("The character %c occurred %d times\n",ch,num); 
     printf("The (row,column) index pairs for the locations of\n"); 
     printf("the character %c follow:\n", ch); 
     for(i=0;i<num;i++){ 
      printf("(%d,%d)\n",i,j); 
      fclose(fPtr); 
    } 
    return 0; 
} 
void cc(char a[][NC], int locations[NCC][2], char ch, int *num){ 
    int i,j,k; 

    k=0; 

     for(i=0; i<NR; i++){ 
      for(j=0; j<NC; j++){ 
      //scanf("%c", &a[i][j]); 

    if(a[i][j]==ch?locations=loc:0){ 
      locations[k][0]=i; 
      locations[k][1]=j; 

      *num=k; 
      k++; 

         } 


          } 
//*num=k; 
} 



//*num=k; 
} 
} 

Консоль вывода: unersame @ убунт: ~ $ НКИ -o 42b /home/unersame/Desktop/42b.c /tmp/cctIyUei.o: В функции main': 42b.c:(.text+0x1fe): undefined reference to куб.сма» collect2: ошибка: л.д. 1 возвращается статус выходаошибка: -ld вернул 1 статус выхода.

Если я прокомментирую вызов функции (cc (a, loc, ch, & num);) он скомпилируется. Какие-либо предложения? Это мой первый курс программирования, и я слишком долго бил головой об этом.

Выход с вызовом функции закомментирована:

Character array is: 
231456 
s3fgtr 
wer56t 
1233gh 
Enter character to search for 
3 
The character 3 occurred 32766 times 
The (row,column) index pairs for the locations of 
the character 3 follow: 
(0,6) 
(1,6) 
*** Error in `./42b': double free or corruption (top): 0x0000000000bc2010 *** 
Aborted (core dumped) 
[email protected]:~$ gcc -o 42b /home/unersame/Desktop/42b.c -std=c99 
/tmp/ccl8WvHf.o: In function `main': 
42b.c:(.text+0x1f1): undefined reference to `cc' 
collect2: error: ld returned 1 exit status 
+0

Если 'cc()' вызывается в 'cctlyUei.o', вам нужно указать' 42b.c' * после * 'cclyUei.o' в порядке параметров программы. – EOF

+0

Можете ли вы ELI5? Что такое cctlyUei.o? – user224202

+0

Пожалуйста, отформатируйте свой код. –

ответ

0

У вас есть дополнительные ";" в cc определении функции:

void cc(char a[][NC], int loc[NCC][2], char ch, int *num); { 
    int i,j,k,loc[NCC][2],num; 
    char ch, arr[NR][NC]; 
    k0; 
0

У вас есть точка с запятой после объявления функции здесь:

void cc(char a[][NC], int loc[NCC][2], char ch, int *num); { 

Что является причиной, что это заявление, а не определение функции. Я считаю, что удаление этой точки с запятой должно привести к ошибке компоновщика, но, откровенно говоря, трудно сказать; вам будет легче, если вы сохраните свой код правильно отформатированным и отступом.

+0

Я ошибочно скопировал код из предыдущей попытки отладки с визуальной студией, отредактировал текущий. Спасибо за ответы! – user224202

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