2015-05-27 14 views
5

में getchar मैं माइक्रोसॉफ्ट विजुअल स्टूडियो 2012 के साथ काम कर रहा हूं और एक बबल प्रकार बनाने की कोशिश कर रहा हूं। यहां मेरा कोड है:बबल सॉर्टिंग और सी

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

सबसे पहले मैं एक मुख्य प्रविष्टि के लिए कंसोल नहीं बना सकता। getchar() काम नहीं कर रहा है लेकिन मुझे कोई त्रुटि नहीं है। इसके अलावा जब मैं एक सेकंड के लिए कंसोल देखता हूं, तो मैं कह सकता हूं कि संख्याएं "-3108 9 2" जैसी सूचीबद्ध हैं। मुझे नहीं पता क्यों।

+4

कॉल 'scanf_s ("% d ", सरणी)' 'array' में पहली प्रविष्टि, * हर समय में पढ़ा जाएगा * । –

+0

सरणी होना चाहिए [सी] मुझे लगता है? –

+5

नहीं, 'और सरणी [सी] 'या' (सरणी + सी) होना चाहिए: आपको यहां' int' के लिए एक सूचक की आवश्यकता है। –

उत्तर

0

मैंने उन टाइपों को ठीक किया जिन्हें दूसरों ने उल्लेख किया और system("pause") जोड़ा। वीएस 2010 पर मेरे लिए ठीक काम किया। इसका परीक्षण करने के लिए वीएस 2012 तक पहुंच नहीं है। यहां आपका कोड है:

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

आशा है कि यह आपके लिए भी ठीक काम करेगा।

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. कृपया ध्यान दें मैं अतिरिक्त चर "झंडा" जो अपने कार्यक्रम की क्षमता बढ़ाने के लिए क्योंकि पाश टूट जाएगा जब अपने तत्वों छँटाई लेकिन अपने कार्यक्रम में पाश कुछ कर रही हो सकता है किया जाता है में मदद करता है जोड़ रहा अतिरिक्त पुनरावृत्ति।
+0

'ध्वज' एक भयानक चर नाम है। यह क्या इंगित करता है? –

+0

जैसा कि मैंने कहा है कि सॉर्टिंग होने पर उस पुनरावृत्ति पर लूप को समाप्त करके दक्षता में वृद्धि होती है .... इसके बिना लूप एन-1 बार निष्पादित करेगा।यह अतिरिक्त पुनरावृत्तियों को बचाता है –

0

अपने बुलबुला तरह कार्यान्वयन के संबंध में:

  1. अपने scanf_s पहले for पाश में हमेशा सरणी के पहले की स्थिति में संख्या पढ़ता है।
  2. पिछले for लूप में आपके printf एक पूर्णांक की अपेक्षा करता है लेकिन आप एक पता प्रदान करते हैं।

कंसोल को गायब होने से रोकने के लिए, आप getchar() को system("pause") से प्रतिस्थापित कर सकते हैं, हालांकि यह पोर्टेबल नहीं है।

इन बातों को ठीक, बुलबुला तरह मेरे लिए काम करता है:

#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; 
} 
संबंधित मुद्दे