В коде много ошибок, я просто выкладываю свое возможное наблюдение.Во-первых, это
fscanf (fp,"%s",&data);
должно быть
fscanf (fp,"%s",&data[i]);
Во-вторых, здесь в descend()
части функции внутреннего цикла функции вы используете j=20
, который работает бесконечно.Вот где MACRO пригодится, так как этот j=20
просто запускается, т. Е. Если он может иметь ROW=j
, где ROW
равен 20
, то компилятор выдает значимую ошибку.Эта функция
void descend (data) { /* what is the tyep of data ? you should mention the data type */
int temp;
for(i=0;i<100;i++) { /* there are only 20 lines not 100 i.e it should be i<20 */
for(j=0;j=20;j++) { /* condition is wrong, you indented for j<20 but that too
wrong as there are supposed to be max 100 char in line
it should be j<100 */
if (data[i][j+1]>data[i][j]) /* condition is not correct */
temp=data[i][j];
data[i][j]=data[i][j+1];
data[i][j+1]=temp;
}
}
}
Правильная версия descend
может быть
void descend (char (*data)[ROW], int col) { /* define ROW as macro with value 20 and pass the col i.e 100 */
int temp;
for(i=0;i < ROW; i++) {
for(j=0;j < col; j++) {
if (data[i][j] > data[i][j+1])
temp = data[i][j];
data[i][j] = data[i][j+1];
data[i][j+1] = temp;
}
}
}
Также проверьте возвращаемое значение fopen()
, чтобы проверить, был ли он успешным, r не пройден, и выполнить правильную проверку.Например,
fp = fopen("data.txt","r");
if(fp == NULL) {
/* @TODO error handling */
fprintf(stderr,"file doesn't exist");
return 0;
}