2015-05-27 13 views
5

Tôi đang làm việc với microsoft visual studio 2012 và cố gắng tạo ra một loại bong bóng. Đây là mã của tôi:phân loại bong bóng và getchar trong 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; 
} 

Trước hết, tôi không thể tạo bảng điều khiển cho mục nhập chính. getchar() có vẻ như không hoạt động nhưng tôi không có bất kỳ lỗi nào. Thêm vào đó khi tôi thấy giao diện điều khiển trong một giây, tôi có thể nói rằng các số được liệt kê như "-310892". Tôi không biết tại sao.

+4

Cuộc gọi 'scanf_s ("% d", mảng) 'sẽ đọc vào mục đầu tiên trong' array', * tất cả các thời gian * . –

+0

nên được mảng [c] tôi nghĩ? –

+5

Không, nên là '& mảng [c]' hoặc '(mảng + c)': Bạn cần một con trỏ tới 'int' tại đây. –

Trả lời

0

Tôi đã sửa lỗi chính tả mà người khác đã đề cập và thêm system("pause"). Làm việc tốt cho tôi vào VS 2010. Chưa có quyền truy cập vào VS 2012 để kiểm tra nó. Dưới đây là mã của bạn:

#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; 
    } 

Hy vọng nó hoạt động tốt cho bạn quá.

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. Xin lưu ý tôi đang bổ sung thêm biến "cờ" giúp tăng hiệu quả của chương trình của bạn vì vòng lặp sẽ phá vỡ khi các yếu tố của bạn được thực hiện sắp xếp nhưng trong chương trình của bạn vòng lặp có thể được thực hiện một số lặp lại thêm.
+0

'flag' là một tên biến khủng khiếp. Nó chỉ ra điều gì? –

+0

Như tôi đã nói nó làm tăng hiệu quả bằng cách kết thúc vòng lặp tại vòng lặp đó khi sắp xếp xong ... mà không có nó vòng lặp sẽ thực thi n-1 lần.Nó giúp tiết kiệm thêm các lần lặp –

0

Về bong bóng sắp xếp thực hiện của bạn:

  1. scanf_s của bạn trong for vòng lặp đầu tiên luôn đọc số vào vị trí đầu tiên của mảng.
  2. printf trong vòng lặp for cuối cùng mong đợi một số nguyên nhưng bạn cung cấp địa chỉ.

Để ngăn bảng điều khiển biến mất, bạn có thể thay thế getchar() bởi system("pause"), mặc dù điều này không thể di chuyển được.

Sửa chữa những điều này, các bong bóng sắp xếp làm việc cho tôi:

#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; 
} 
Các vấn đề liên quan