Помогите с простой задачей.

  • Автор темы Donat
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

Donat

#1
Программа принрмает ФИО, год рождения и т. д. Хоршо все выводит, но я никак не могу понять, почему метод пузырька тут не работает.(Я надеюсь, что здесь найдется человек, который увидит здесь ошибку или хоть как-нибудь подскажет)(С++ v 3.1):
#include <stdio.h>
#include <string.h>
void main(){
const int max = 50;
int Number, i;
struct Students{
char Name[40];
int Year;
char Tel[15];
}Spisok[max];

printf("\nVvedite kolichestvo stydentov N =");
scanf("%i", &Number);

for ( i = 0 ; i<Number; i++){
printf("Vvedite FIO\n");
scanf("%s", &Spisok.Name);
printf("Vvedite God\n");
scanf("%i", &Spisok.Year);
printf("Vvedite Telefon\n");
scanf("%s", &Spisok.Tel);
}


{for (i = 0; i<Number-1; i++);{
int imin = i;
for ( int j = i + 1; j < Number; j++){
if(strcmp( Spisok[j].Name, Spisok[imin].Name) < 0)
imin = j;
char a[40]; strcpy(a, Spisok.Name);
strcpy(Spisok.Name, Spisok[imin].Name);
strcpy(Spisok[imin].Name, a);}
} }

printf("\nSpisok vsex vvedennix stydentov\n");
printf(" FIO");
printf(" God rogdenia");
printf(" Telefon\n");
for ( i = 0 ; i<Number; i++){
printf("\n%30s%8i%20s", Spisok.Name, Spisok.Year, Spisok.Tel);
}
}
Заранее благодарю за ответ.
 
A

Anton Chik

#2
во-первых правильно ли будет писать scanf("%i", &Number); ??? в частности %i вместо %d ,
во-вторых после ввода данных(перед сортировкой) выводи эти данные ,чтобы посмотреть правильно ли они ввелись,
а в-третьих мне кажется описанная тобой сортировка больше смахивает на "последовательный отбор" нежели на "пузырика" (судя по структуре циклов сортировки).
вижу косяк - цикл j надо закрыть после

if(strcmp( Spisok[j].Name, Spisok[imin].Name) < 0)
imin = j;

,а не после

strcpy(Spisok[imin].Name, a);} как у тебя

еще,кстати,замечены лишние скобки (зачем выделять само тело сортировки???)

p.s. плохой тон "сто" раз в цикле (а у тебя даже в двух вложенных) объявлять char a[40] ...
,а хорошим тоном считается писать скобки одного тела друг под другом - читать будет удобнее B)

вобщем ,разберись со всем этим для начала...
 
Статус
Закрыто для дальнейших ответов.