সমস্যার লিঙ্ক

কোডঃ

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

int main()
{
    char ch;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",&ch);
        if(ch>='0' && ch<='9')
        {
            printf("Numerical Digit\n");
        }
        else if(ch>='A' && ch<='Z')
        {
            printf("Uppercase Character\n");
        }
        else if(ch>='a' && ch<='z')
        {
            printf("Lowercase Character\n");
        }
        else
        {
            printf("Special Character\n");
        }
    }

    return 0;
}

asked 06 May, 18:40

Lelin07's gravatar image

Lelin07
313

edited 07 May, 04:38

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
23618

This shows the right answer. Please Run the code again.

(07 May, 13:24) Tanim_113

আপনার লজিকে কোন ধরনের সমস্যা নেই। আপনার কোডিং-এ দুই ধরনের সমস্যা আছে।

সমস্যা - ১ঃ আপনি ক্যারেক্টার স্ক্যান করার সময় %s ফরম্যাট স্পেসিফায়ার দিয়েছেন যেটা একটা সিঙ্গেল ক্যারেক্টার স্ক্যানের ফরম্যাট স্পেসিফায়ার নয়। এ কারণে আশেপাশে একই লাইনে যতগুলো ক্যারেক্টার পাবে ইনপুট হিসেবে সেগুলো নিতে যাবে এবং সর্বশেষ ক্যারেক্টারটা আপনার ভ্যারিয়েবলে রাখবে। এরপর সেটা দিয়েই মান বের করে আউটপুট প্রিন্ট করবে। ক্যারেক্টার স্ক্যান করার জন্য আপনি ফরম্যাট স্পেসিফায়ার হিসেবে %c ব্যবহার করতে পারেন।

সমস্যা - ২ঃ এই সমস্যাটা হচ্ছে ইনপুট প্রসেসিং নিয়ে। প্রতিবারে যখন আপনি একটা করে ক্যারেক্টার ইনপুট নিচ্ছেন তখন একইসাথে কিন্তু আপনি কিবোর্ড থেকে একটা Enter কিও ইনপুট হিসেবে দিয়ে দিচ্ছেন যার একটা ASCII মান আছে। এবং সেটাও একটা স্পেশাল ক্যারেক্টার হিসেবে গণ্য হচ্ছে। এ কারণে প্রতিটা ইনপুটেের জন্য উলটো রেজাল্ট আসছে। আপনি প্রত্যাশিত আউটপুটের জন্য যেটা করতে পারেন,

while(t--){
}

লুপের ভেতরে প্রতিটা ক্যারেক্টার স্ক্যান করার আগে একটা

getchar();

দিয়ে নিতে পারেন। এতে করে ইনপুট নেবার পরের প্রতিটা Enter ক্যারেক্টার এখানেই স্টোর হয়ে যাবে এবং সেটা নিয়ে আপনি কোন কিছুই করছেন না। যার কারণে সঠিক ক্যারেক্টারটা দিয়ে রেজাল্ট নির্ণয় করা হবে।

টিপসঃ বিশেষ করে স্ট্রিং বা ক্যারেক্টার ইনপুট সংক্রান্ত সমস্যাগুলোতে ইনপুট নেয়ার ক্ষেত্রে এই সমস্যাটা প্রায় সময় প্রায় সবার ক্ষেত্রেই হয়ে থাকে। এক্ষেত্রে আপনি যেটা করতে পারেন- যে লাইন বা ক্যারেক্টারটা ইনপুট হিসেবে নিচ্ছেন সেটা প্রিন্ট করে দেখতে পারেন আসলেই আপনি যে ইনপুট নিয়ে কাজ করছেন সেটা স্ক্যান হয়েছে কিনা না।

আশা করি আপনার জন্য এটুকুই যথেষ্ট হবে।

permanent link

answered 07 May, 15:59

ssavi's gravatar image

ssavi
842

edited 07 May, 17:47

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
23618

tnx... problem ta solve korte parsi.

(10 May, 04:52) Lelin07
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×42

question asked: 06 May, 18:40

question was seen: 76 times

last updated: 10 May, 04:52