У меня проблема с этой программой. Когда я пытаюсь запустить его на своем Mac, он возвращает «Abort trap: 6». Я не могу понять причину.«Прерывание ловушки: 6» работает программа C на Mac
Ниже приведено содержимое файла, которое я использовал для тестирования программы.
aaabccdegags
bbbbbbbcados
vbaiusbyabtd
aisybavsitvc
asindvsivati
ammaccabanan
Вы просто должны скопировать эти бессмысленные строки в текстовый файл file.txt
и называют его в командной строке с синтаксисом:
program.exe file.txt r
где file.txt
содержит бессмысленные строки и r
- это буква, которую он должен искать в текстовом файле.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define R 24
#define C 71
int main(int argc, char * argv[]) {
if (argc!=3){
printf("Errore acquisizione parametri\n");
return -1;
}
FILE*fp;
char m[R][C],c,posizione[10];
int i,j,lstr,numrighe,quante,quantemax,posiz,x,y,maxmax;
maxmax=0;
//posiz=1 se orizzontale
quantemax=0;
sscanf(argv[2],"%c",&c);
fp=fopen(argv[1],"r");
if (fp==NULL){
printf("Errore apertura file\n");
return -3;
}
for (i=0;i<R && (!feof(fp));i++){
fgets(m[i],C,fp);
}
fclose(fp);
lstr=strlen(m[0]);
numrighe=i;
for (i=0;i<lstr;i++){
quante=0;
for (j=0;j<numrighe;j++) {
if (m[i][j]==m[i][j+1]){
quante++;
if (quante>quantemax){
quantemax=quante;
if (quantemax>maxmax){
y=i;
x=j;
posiz=1;
}
}
}
}
}
for (i=0;i<lstr;i++){
quante=0;
for (j=0;j<numrighe;j++) {
if (m[i][j]==m[i+1][j]){
quante++;
if (quante>quantemax){
quantemax=quante;
if (quantemax>maxmax){
y=i;
x=j;
posiz=0;
}
}
}
}
}
if (posiz==1){
strcpy(posizione,"orizzontale");
}
else {
if (posiz==0){
strcpy(posizione,"verticale");
}
}
printf("La stringa con il maggior numero di %c consecutive, si trova in %s a partire dalla posizione %d,%d",c,posizione,x,y);
return 0;
}
Предложение: '! Feof (fp)' имеет тенденцию быть ошибочным. –
Можете ли вы использовать отладчик, чтобы точно определить точную ошибочную инструкцию? –