Форум «Всё о Паскале» _ Ада и другие языки _ Сортировка массива. Язык С.
Автор: Bo2nik 19.03.2008 19:50
Недавно стали проходить язык С, написал программу сортировки массива через указатели. Выдает ошибки: 1. g:\на си\sort_bubble\sort_bubble.cpp(13): error C2143: syntax error : missing ';' before '{' 2. g:\на си\sort_bubble\sort_bubble.cpp(12): error C2059: syntax error : '*'
Если убрать "*" то это уже получается не через указатели или как? Помогите пожалуйста.
Код
#include "stdafx.h" #include "stdio.h"
void bubbleSort(int a[], int col) { int b=0; for (int i=1; i<col; i++) { for (int j=0; j<col-i; j++) { if *(a+j)>*(a+j+1) { b=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=b; } } } }
void main() { int i, j; printf ("<SORT ARRAY>\n"); int a[5]; i=0; while (i<5) { printf ("Enter %d element array\n",i); scanf ("%d",*(a+i)); i++; }
i=0; printf ("ORIGINAL ARRAY ->\n"); while (i<5) { printf("%d element = %d\n",i,*(a+i)); i++; }
bubbleSort( a, 5 ); printf ("ARRAY AFTER SORT ->\n"); for ( i = 0; i < 5; i ++ ) { printf ("%d element = %d\n",i,*(a+i)); }
}
Автор: volvo 19.03.2008 20:00
Ты просто не взял в скобки все, что нужно:
if ((*(a+j))>(*(a+j+1))) { ... }
Добавлено через 1 мин. P.S. Программа (если это именно C, а не С++) компилироваться не должна - описание переменных должно быть только ДО начала блока операторов, у тебя же локальные переменные описываются в операторе цикла...
Автор: Bo2nik 19.03.2008 20:07
Цитата(volvo @ 19.03.2008 16:00)
Ты просто не взял в скобки все, что нужно:
if ((*(a+j))>(*(a+j+1))) { ... }
Добавлено через 1 мин. P.S. Программа (если это именно C, а не С++) компилироваться не должна - описание переменных должно быть только ДО начала блока операторов, у тебя же локальные переменные описываются в операторе цикла...
Ээээ... точно чет, я, не посмотрел. Так скобки поставил теперь такая фигня вылезает:
Build log was saved at "file://g:\На Си\sort_bubble\Debug\BuildLog.htm" sort_bubble - 0 error(s), 1 warning(s)
Когда запускаю программу, всё идет как надо, но после того как я веду первый элемент вылетает ошибка: "Отправлять - Не отправлять" и всё.
PS Когда я убирал "*" с условия if, т.е. обращался не через указатели, то всё нормально работало. Даже незнаю, что делать.
Автор: volvo 19.03.2008 20:34
Цитата
после того как я веду первый элемент вылетает ошибка:
Угу, все правильно...
Цитата
scanf ("%d",*(a+i)); /* Ну, и куда ты записываешь введенное значение? */
надо вот так:
scanf ("%d",(a+i));
потому что должен передаваться адрес переменной, а не значение...
Автор: Bo2nik 19.03.2008 20:40
Ух ты заработало !!! Даже сам не понял, че написал про этот scanf !!! Спасибо.