2015-05-27 10 views
5

Pracuję z aplikacją microsoft visual studio 2012 i próbuję zrobić sortowanie bąbelkowe. Oto mój kod:sortowanie bąbelkowe i getchar c

#include "stdafx.h" 
#include "String.h" 
#include <iostream> 
#include <string.h> 
using namespace std; 

int main() 
{ 
    int array[100], n, c, d, swap; 
    printf("enter numbers of elements\n"); 
    scanf_s("%d",&n); 
    printf("enter %d integers\n", n); 
    for (c = 0; c < n; c++){ 
     scanf_s("%d", array); 
    } 
    for (c = 0; c < (n - 1); c++) 
    { 
     for (d = 0; d < n - c - 1; d++) 
     { 
      if (array[d]>array[d + 1]){ 
       swap = array[d]; 
       array[d] = array[d + 1]; 
       array[d + 1] = swap; 
      } 
     } 
    } 
    printf("sorted list in ascending order:\n"); 
    for (c = 0; c < n; c++){ 
     printf("%d\n", &array[c]); 
    } 
    getchar(); 
    return 0; 
} 

Przede wszystkim nie mogę zagwarantować, że konsola zostanie na klucz. getchar() wydaje się nie działać, ale nie mam żadnego błędu. Plus, gdy widzę konsolę przez sekundę, mogę powiedzieć, że liczby są wymienione na "-310892". Nie wiem dlaczego.

+4

Wywołanie 'scanf_s ("% d", tablica)' przeczyta do pierwszego wpisu 'array', cały czas * * . –

+0

powinien być tablicą [c] myślę? –

+5

Nie, powinno być 'i tablica [c]' lub '(tablica + c)': Potrzebujesz wskaźnika do 'int' tutaj. –

Odpowiedz

0

Naprawiłem literówki wymienione przez innych i dodano system("pause"). Sprawdziło się dla mnie na VS 2010. Nie mam dostępu do VS 2012, aby go przetestować. Oto twój kod:

#include <string.h> 
#include <stdio.h> 

    int main() 
    { 
     int array[100], n, c, d, swap; 

     printf("enter numbers of elements\n"); 
     scanf("%d",&n); 
     printf("enter %d integers\n", n); 

     for (c = 0; c < n; c++){ 
      scanf("%d", &array[c]); 
     } 

     for (c = 0; c < (n - 1); c++) 
     { 
      for (d = 0; d < n - c - 1; d++) 
      { 
       if (array[d]>array[d + 1]){ 
        swap = array[d]; 
        array[d] = array[d + 1]; 
        array[d + 1] = swap; 
       } 
      } 
     } 
     printf("sorted list in ascending order:\n"); 

     for (c = 0; c < n; c++){ 
      printf("%d\n", array[c]); 
     } 

     system("pause"); // <---- Added this!!! 

     return 0; 
    } 

Mam nadzieję, że to działa dobrze dla ciebie też.

2
#include<stdio.h> 
#include<conio.h> 
#include<stdlib.h> 

int main(void) 
{ 
    int array[100],n,c,d,flag,swap; 
    printf("Enter the no. of elements\n"); 
    scanf("%d",&n); 
    for(c=0;c<n;c++) 
    { 
     scanf("%d",&array[c]); // here you have to add & for assigning a address to variable in memory 
    } 


for(c=0;c<(n-1);c++) 
{ 
    flag=0; 
    for(d=0;d<n-c-1;d++) 
    { 
     if(array[d]>array[d+1]) 
     { 
      swap=array[d]; 
      array[d]=array[d+1]; 
      array[d+1]=swap; 
      flag=1; 
     } 

    } 
    if(flag==0) 
    break; 
} 
printf("sorted elements in ascending order:\n"); 
for(c=0;c<n;c++) 
{ 
    printf("%d\t",array[c]);// you want to print the element not its address so no need of & 
} 
getch();  
return 0;} 
  1. Uwaga Dodaję dodatkową zmienną „Flag”, który przyczynia się do zwiększenia efektywności programu, ponieważ pętla pęknie, gdy elementy są wykonane sortowanie ale w programie pętla może robić niektóre dodatkowa iteracja.
+0

'Flaga' jest okropną nazwą zmiennej. Co to oznacza? –

+0

Jak już powiedziałem, zwiększa to wydajność kończąc pętlę w tej iteracji, kiedy sortowanie jest wykonywane ... bez niego pętla zostanie wykonana n-1 razy.Zapisuje dodatkowe iteracje –

0

chodzi bańka realizacji sortowania:

  1. swój scanf_s w pierwszym for pętli zawsze odczytuje numer na pierwszej pozycji w tablicy.
  2. Twoja printf w ostatniej pętli oczekuje liczby całkowitej, ale podajesz adres.

Aby zabezpieczyć konsolę przed zniknięciem, można zastąpić getchar() przez system("pause"), chociaż nie jest to przenośne.

Korygowanie tych rzeczy, bubble sort działa dla mnie:

#include "stdafx.h" 
#include "String.h" 
#include <iostream> 
using namespace std; 
#include <string.h> 

int main() { 
    int array[100], n, c, d, swap; 

    printf("enter numbers of elements\n"); 
    scanf_s("%d",&n); 
    printf("enter %d integers\n", n); 

    for (c = 0; c < n; c++) { 
     scanf_s("%d", &array[c]); 
    } 

    for (c = 0; c < (n - 1); c++) { 
     for (d = 0; d < n - c - 1; d++) { 
      if (array[d] > array[d + 1]) { 
       swap = array[d]; 
       array[d] = array[d + 1]; 
       array[d + 1] = swap; 
      } 
     } 
    } 

    printf("sorted list in ascending order:\n"); 
    for (c = 0; c < n; c++){ 
     printf("%d\n", array[c]); 
    } 

    system("pause"); 
    return 0; 
}