2013-10-30 2 views
0

나는 여러 번 모든 것을 두 번 확인했지만 왜 실행 파일을 컴파일 할 수 있는지 이해할 수 없지만 일단 실행하면이 오류 "분할 오류 : 11"이 표시됩니다.분할 오류 : 11

#include<stdio.h> 

void vocali(char testo[101], output) 
{ 

char a=0,e=0,i=0,o=0,u=0; 
int contatore=0, j=0; 

for (j=0; j<100; j++) 
{ 
    if((testo[j] =='a')||(testo[j]=='A')) 
    { 
     contatore++; 
     a++; 
    } 
    else if((testo[j] =='e')||(testo[j]=='E')) 
    { 
     contatore++; 
     e++; 
    } 
    else if((testo[j] =='i')||(testo[j]=='I')) 
    { 
     contatore++; 
     i++; 
    } 
    else if((testo[j] =='o')||(testo[j]=='O')) 
    { 
     contatore++; 
     o++; 
    } 
    else if((testo[j] =='u')||(testo[j]=='U')) 
    { 
     contatore++; 
     u++; 
    } 
} 
fprintf((FILE*)output, "%s", "%d", "Le vocali nella stringa sono:\n",contatore); 
fprintf(output, "Lettere 'A' sono: %d\n",a); 
fprintf(output, "Lettere 'E' sono: %d\n",e); 
fprintf(output, "Lettere 'I' sono: %d\n",i); 
fprintf(output, "Lettere 'O' sono: %d\n",o); 
fprintf(output, "Lettere 'U' sono: %d\n",u); 
} 


void consonanti(char testo[101], output) 
{ 

char b=0,c=0,d=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0; 
int contatore=0,i=0; 

for (i=0; i<100; i++) 
{ 
    if ((testo[i]=='b')||(testo[i]=='B')) 
    { 
     contatore++; 
     b++; 
    } 
    else if ((testo[i]=='c')||(testo[i]=='C')) 
    { 
     contatore++; 
     c++; 
    } 
    else if ((testo[i]=='d')||(testo[i]=='D')) 
    { 
     contatore++; 
     d++; 
    } 
    else if ((testo[i]=='f')||(testo[i]=='F')) 
    { 
     contatore++; 
     f++; 
    } 
    else if ((testo[i]=='g')||(testo[i]=='G')) 
    { 
     contatore++; 
     g++; 
    } 
    else if ((testo[i]=='h')||(testo[i]=='H')) 
    { 
     contatore++; 
     h++; 
    } 
    else if ((testo[i]=='j')||(testo[i]=='J')) 
    { 
     contatore++; 
     j++; 
    } 
    else if ((testo[i]=='k')||(testo[i]=='K')) 
    { 
     contatore++; 
     k++; 
    } 
    else if ((testo[i]=='l')||(testo[i]=='L')) 
    { 
     contatore++; 
     l++; 
    } 
    else if ((testo[i]=='m')||(testo[i]=='M')) 
    { 
     contatore++; 
     m++; 
    } 
    else if ((testo[i]=='n')||(testo[i]=='N')) 
    { 
     contatore++; 
     n++; 
    } 
    else if ((testo[i]=='p')||(testo[i]=='P')) 
    { 
     contatore++; 
     p++; 
    } 
    else if ((testo[i]=='q')||(testo[i]=='Q')) 
    { 
     contatore++; 
     q++; 
    } 
    else if ((testo[i]=='r')||(testo[i]=='R')) 
    { 
     contatore++; 
     r++; 
    } 
    else if ((testo[i]=='s')||(testo[i]=='S')) 
    { 
     contatore++; 
     s++; 
    } 
    else if ((testo[i]=='t')||(testo[i]=='T')) 
    { 
     contatore++; 
     t++; 
    } 
    else if ((testo[i]=='w')||(testo[i]=='W')) 
    { 
     contatore++; 
     w++; 
    } 
    else if ((testo[i]=='x')||(testo[i]=='X')) 
    { 
     contatore++; 
     x++; 
    } 
    else if ((testo[i]=='y')||(testo[i]=='Y')) 
    { 
     contatore++; 
     y++; 
    } 
    else if ((testo[i]=='z')||(testo[i]=='Z')) 
    { 
     contatore++; 
     z++; 
    } 
} 
fprintf(output, "le consonanti nella stringa sono: ",contatore); 
fprintf(output, "Lettere 'B' sono: %d\n",b); 
fprintf(output, "Lettere 'C' sono: %d\n",c); 
fprintf(output, "Lettere 'D' sono: %d\n",d); 
fprintf(output, "Lettere 'F' sono: %d\n",f); 
fprintf(output, "Lettere 'G' sono: %d\n",g); 
fprintf(output, "Lettere 'H' sono: %d\n",h); 
fprintf(output, "Lettere 'J' sono: %d\n",j); 
fprintf(output, "Lettere 'K' sono: %d\n",k); 
fprintf(output, "Lettere 'L' sono: %d\n",l); 
fprintf(output, "Lettere 'M' sono: %d\n",m); 
fprintf(output, "Lettere 'N' sono: %d\n",n); 
fprintf(output, "Lettere 'P' sono: %d\n",p); 
fprintf(output, "Lettere 'Q' sono: %d\n",q); 
fprintf(output, "Lettere 'R' sono: %d\n",r); 
fprintf(output, "Lettere 'S' sono: %d\n",s); 
fprintf(output, "Lettere 'T' sono: %d\n",t); 
fprintf(output, "Lettere 'V' sono: %d\n",v); 
fprintf(output, "Lettere 'W' sono: %d\n",w); 
fprintf(output, "Lettere 'X' sono: %d\n",x); 
fprintf(output, "Lettere 'Y' sono: %d\n",y); 
fprintf(output, "Lettere 'Z' sono: %d\n",z); 
} 

void numeri(char testo[101], output) 
{ 

char zero=0,uno=0,due=0,tre=0,quattro=0,cinque=0,sei=0,sette=0,otto=0,nove=0; 
int contatore=0, k=0; 

for (k=0; k<100; k++) 
{ 
    if(testo[k] =='0') 
    { 
     contatore++; 
     zero++; 
    } 
    else if(testo[k] =='1') 
    { 
     contatore++; 
     uno++; 
    } 

    else if(testo[k] =='2') 
    { 
     contatore++; 
     due++; 
    } 
    else if(testo[k] =='3') 
    { 
     contatore++; 
     tre++; 
    } 
    else if(testo[k] =='4') 
    { 
     contatore++; 
     quattro++; 
    } 
    else if(testo[k] =='5') 
    { 
     contatore++; 
     cinque++; 
    } 
    else if(testo[k] =='6') 
    { 
     contatore++; 
     sei++; 
    } 
    else if(testo[k] =='7') 
    { 
     contatore++; 
     sette++; 
    } 
    else if(testo[k] =='8') 
    { 
     contatore++; 
     otto++; 
    } 
    else if(testo[k] =='9') 
    { 
     contatore++; 
     nove++; 
    } 
} 
fprintf(output, "I numeri nella stringa sono: %d\n",contatore); 
fprintf(output, "I numeri '0' sono: %d\n",zero); 
fprintf(output, "I numeri '1' sono: %d\n",uno); 
fprintf(output, "I numeri '2' sono: %d\n",due); 
fprintf(output, "I numeri '3' sono: %d\n",tre); 
fprintf(output, "I numeri '4' sono: %d\n",quattro); 
fprintf(output, "I numeri '5' sono: %d\n",cinque); 
fprintf(output, "I numeri '6' sono: %d\n",sei); 
fprintf(output, "I numeri '7' sono: %d\n",sette); 
fprintf(output, "I numeri '8' sono: %d\n",otto); 
fprintf(output, "I numeri '9' sono: %d\n",nove); 
} 


int main() 
{ 

FILE *inFile = fopen("input.txt","r"); 
FILE *outputVocali = fopen("vocali.txt","w+"); 
FILE *outputConsonanti = fopen("consonanti.txt","w+"); 
FILE *outputNumeri = fopen("numeri.txt","w+"); 

if(inFile == NULL) 
{ 
    printf("Errore nell'aprire input.txt\n"); 
} 
if(outputVocali == NULL) 
{ 
    printf("Errore nell'aprire vocali.txt\n"); 
} 
if(outputConsonanti == NULL) 
{ 
    printf("Errore nell'aprire consonati.txt\n"); 
} 
if(outputNumeri == NULL) 
{ 
    printf("Errore nell'aprire numeri.txt\n"); 
} 

char testo[100]; 

fgets(testo, sizeof testo, inFile); 

vocali(testo, outputVocali); 
consonanti(testo, outputConsonanti); 
numeri(testo, outputNumeri); 

fclose(inFile); 
fclose(outputVocali); 
fclose(outputConsonanti); 
fclose(outputNumeri); 

return 0; 
} 

이 오류의 원인은 무엇인가 :

이 내 코드? 소스 코드보기, 그 코드가 무엇을 생성하는지 알려주시겠습니까?

fgets(testo, sizeof testo, inFile) ; 

이 존재하는 input.txt 안정적으로 나를 위해 세그먼트 폴트를 생산하고 있지 않는 :

고마워 그것은이 라인과 같은

+0

gdb [https://www.gnu.org/software/gdb/]를 시도하여 코드를 단계별로 실행하고 코드의 어느 부분이 seg-fault를 생성하는지 확인해 보셨습니까? – ffledgling

+1

디자인을 재검토해야하며 코드가 좋지 않습니다. – Maroun

+4

파일을 열지 만 실행을 계속하지 않으면 오류 메시지가 출력됩니다 ... 좋은 생각이 아닙니다. –

답변

1

가 범인입니다. 파일을 열지 못하면 오류 메시지를 인쇄하는 것 이상의 일을해야합니다. 여러 가지 다른 문제가 있습니다, output 예를 들어 함수 정의에 유형이 필요합니다 :

void vocali(char testo[101], FILE * output) 
          ^^^^^^ 

하고 fprintf들 중 일부는 필요한 것보다 더 많은 매개 변수를 가지고 예를 들어 올바른 보이지 않는 :

fprintf(output, "%s", "%d", "Le vocali nella stringa sono:\n",contatore); 
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

정말 의도 한 것처럼 보이지 않습니다. 다음 플래그 나쁜 설정되지 않은 예를 gccclang를 들어, 이러한 문제의 많은 플래그 것 컴파일러 경고에 전환 : 나는 당신이 SO하지만이 SSCCE 제공하기 위해 노력해야 할 새로운 인식

-W -Wall -Wextra -pedantic 

, 문제를 디버그하고 알아내는 데 도움이 될 것입니다.