मैं वर्तमान में ऑनलाइन पाठ्यक्रम CS50 पर जा रहा हूं। इसका उद्देश्य मारियो के पहले स्तर के भीतर पाई जाने वाली सीढ़ियों का एक सेट बनाना है, जैसे नीचे हैशटैग से बनाया गया है। मैंने उपयोगकर्ता को कितनी ऊँचाई में प्रवेश करने की ऊँचाई को छापने में सक्षम होने के बिंदु पर प्राप्त किया है, फिर भी मेरा लूप सीढ़ियों को बनाने के लिए किसी भी हैशटैग का संकेत नहीं देगा। कोई विचार?

यह कैसा दिखना चाहिए

   ##
  ###
 ####
#####

यह मेरा क्या दिखता है

#
#
#
#

कोड:

#include <stdio.h>

int main(void)
{
    int line = 0;
    int blockHeight = blockHeight - 1;
    int space = blockHeight - 1;
    int hashes = 2;

    do
    {
        printf("please give me a number between the range of 1 and 23:\n");
        scanf("%i", &blockHeight);
    }

    while (blockHeight >= 1 != blockHeight <= 23);
    {
        printf("thanks for the correct answer!\n");
    }

    printf("\n\n\n");

    for (int i = 0; i < blockHeight; i++)
    {
        for (int j = 0; j < space; j++)
        {
            printf(" ");
            space--;
            break;
        }

    for (int k = 0; k < hashes; k++)
        {
            printf("#");
            hashes++;
            break;
        }

        for (int z = 0; z < blockHeight; z++)
        {
            printf("\n");
            break;
        }

    }

}
0
Carsol 17 नवम्बर 2015, 09:20

2 जवाब

सबसे बढ़िया उत्तर

1।

int blockHeight = blockHeight - 1;
int space = blockHeight - 1;

यह वेरिएबल को इनिशियलाइज़ करने का गलत तरीका है। इसे बदलो

int blockHeight, space;  

blockHeight का मान प्राप्त करने के बाद आप space = blockHeight - 1; (बाद में लूप) असाइन कर सकते हैं

2।

do
{
    printf("please give me a number between the range of 1 and 23:\n");
    scanf("%i", &blockHeight);
}
while (blockHeight < 1 || blockHeight > 23); // write `||` instead of `!=`
printf("thanks for the correct answer!\n");

यह do तब तक चलेगा जब तक कि शर्त पूरी न हो जाए। शर्त संतुष्ट होने के बाद यह while
के बाद लिखे संदेश को प्रिंट करेगा 3 ।

for (int j = 0; j < space; j++)
{
    printf(" ");
    space--;
    break;
}

इसे बदलें

for (int j = 0; j < space; j++)
{
    printf(" ");
}
space--;

क्योंकि आपने अपने लूप में break; लिखा है, इसलिए लूप केवल एक बार काम करेगा और यह लूप से बाहर निकल जाएगा।

4।

for (int k = 0; k < hashes; k++)
{
    printf("#");
    hashes++;
    break;
}

इसे बदलें

for (int k = 0; k < hashes; k++)
{
    printf("#");
}
hashes++;

जैसे break; के कारण यह # एक बार प्रिंट होगा और लूप से बाहर निकल जाएगा।

5।

for (int z = 0; z < blockHeight; z++)
{
    printf("\n");
    break;
}

लूप के लिए इसे लिखने की आवश्यकता नहीं है। बस एक लाइन काफी है। इसे बदलें

printf("\n");

6।

int main(void)
{
   ////
   // your code
   ////

    return 0; // write this line at the end
}
1
Himanshu 17 नवम्बर 2015, 07:53

while (blockHeight >= 1 != blockHeight <= 23); यह एक मान्य कथन नहीं है।

  1. इस तरह के बयानों में ऑपरेंड != का उपयोग नहीं किया जाता है। इसके बजाय बूलियन ऑपरेटरों (&&, ||) का उपयोग करें।

इसके अलावा डॉक-लूप के बाद ब्लॉक के लिए आवश्यक {} हैं।


एकल # का कारण बिना शर्त break है। जो सिंगल स्पेस को प्रिंट करने के बाद टूट जाता है।

for (int j = 0; j < space; j++)
{
    printf(" ");
    space--;//You don't want to decrement space here
    break;// condition less breaks shouldn't be used. This stat
}

यही बात दूसरे छोरों पर भी लागू होती है

1
Uma Kanth 17 नवम्बर 2015, 06:42