সি প্রোগ্রামিং এইচটিএমএল সিএসএস জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল
ফোরাম
×

 সি টিউটোরিয়াল

সি প্রোগ্রামিং কি? সি এর ইতিহাস সি এর বৈশিষ্ট্যসমূহ কেন সি শিখবেন? সি ইন্সটলেশন প্রথম সি প্রোগ্রাম সি প্রোগ্রামের ফ্লো প্রোগ্রামিং শেখার সঠিক পদ্ধতি সি কীওয়ার্ড সি আইডেন্টিফায়ার সি ভ্যারিয়েবল সি কনস্ট্যান্ট সি ডাটা টাইপ সি মোডিফায়ার সি ইনপুট/আউটপুট সি অপারেটর সি কমেন্ট সি অপারেটর অগ্রাধিকার

সি কন্ট্রোল স্টেটমেন্ট

সি ইফ সি ইফ...ইলস সি ফর লুপ সি হোহাইল লুপ সি ডু...হোহাইল লুপ সি ব্রেক সি কন্টিনিউ সি সুইচ স্টেটমেন্ট সি goto স্টেটমেন্ট

 সি ফাংশন

সি ফাংশন পরিচিতি সি ইউজার কর্তৃক ফাংশন সি ফাংশন টাইপ সি রিকার্সন সি ভ্যারিয়েবল স্কোপ

 সি অ্যারে

সি অ্যারে পরিচিতি সি মালটি-ডাইমেনশনাল অ্যারে সি অ্যারে ফাংশন

 সি স্ট্রিং

সি স্ট্রিং সি স্ট্রিং ফাংশন

 সি পয়েন্টার

সি পয়েন্টার পরিচিত সি পয়েন্টার অ্যারে সি পয়েন্টার ফাংশন সি মেমোরি ম্যানেজমেন্ট

 সি ফাইল এবং স্ট্রাকচার

স্ট্রাকচার পরিচিত স্ট্রাকচার ও পয়েন্টার সি স্ট্রাকচার ও ফাংশন সি ইউনিয়ন ফাইল হ্যান্ডেলিং

 সি অতিরিক্ত টিউটোরিয়াল

সি লাইব্রেরী সি প্রিপ্রোসেসর এবং ম্যাক্রো সি ইনুমিরেশন সি এরর নিয়ন্ত্রণ সি টাইপ কাস্টিং সি বিট ফিল্ড সি ভ্যারিয়েবল আর্গুমেন্ট সি কমান্ড লাইন আর্গুমেন্ট

 

সি এরর হ্যান্ডলিং


সি প্রোগ্রামিং এ যেহেতু এরর হ্যান্ডেলিং(error handling) এর সরাসরি কোনো সাপোর্ট নাই, কিন্তু সিস্টেম প্রোগ্রামিং ল্যাংগুয়েজ হওয়ায় ইহা রিটার্ন ভ্যালুর উপর ভিত্তিকরে lower level এ এক্সেস সরবরাহ করে।

যেকোনো error এর জন্য অধিকাংশ সি অথবা এমনকি ইউনিক্স ফাংশন কল(call) এর ক্ষেত্রেও -1 অথবা NULL রিটার্ন করে এরর কোড হিসাবে errno সেট করে। ইহা গ্লোবাল ভ্যারিয়েবল হিসাবে সেট হয় এবং এই সংকেত দেয় যে, ফাংশন কল করার সময় এরর সংঘটিত হয়েছে।

আপনি বিভিন্ন ধরনের এরর কোড দেখে থাকতে পারেন যা <errno.h> হেডার ফাইলে ডিফাইন্ড করা আছে।

সুতরাং একজন সি প্রোগ্রামার রিটার্ন ভ্যালু চেক করতে পারে এবং রিটার্ন ভ্যালুর উপর ভিত্তিকরে উপযুক্ত কাজটি করতে সক্ষম হয়।

প্রোগ্রাম ইনিশিয়ালাইজিং(initializing) এর সময় errno এর ভ্যালু 0(zero) সেট করা খুবই ভাল। ভ্যালু 0 ইঙ্গিত দেয় যে, প্রোগ্রামে কোনো এরর নাই।


errno, perror() এবং strerror()

সি প্রোগ্রামিং ল্যাংগুয়েজ perror() এবং strerror() দুটি ফাংশন সরবরাহ করে যার মাধ্যমে errno এর সাথে সম্পর্কযুক্ত টেক্সট মেসেজ প্রদর্শন করানো যেতে পারে।

  • perror() ফাংশনটি , এর মধ্য দিয়ে যে স্ট্রিং অতিক্রম করানো হয় তা, এরপরে কোলন(:) এবং errno এর চলমান ভ্যালুর জন্য পাঠ্য উপস্থাপনা(textual representation)-কে প্রদর্শন করায়।
  • strerror() ফাংশনটি errno এর চলমান ভ্যালুর পাঠ্য উপস্থাপনা(textual representation) এর পয়েন্টার রিটার্ন করে।

চলুন, বিদ্যমান নাই এমন একটি ফাইল খোলার(open) চেষ্টা করি এবং এর মাধ্যমে একটি ত্রুটির(error) সৃষ্টি করি। ব্যবহার দেখানোর জন্য এখানে আমরা উভয় ফাংশন-ই ব্যবহার করেছি।

কিন্তু আপনি ত্রুটি দেখানোর জন্য আপনার পছন্দমত এক বা তার অধিক পদ্ধতি ব্যবহার করতে পারেন। দ্বিতীয় গুরুত্বপূর্ণ বিষয় হলো ফাইল প্রবাহের(stream) সমস্ত ত্রুটিসমূহের(errors) আউটপুট নেওয়ার জন্য stderr ব্যবহার করা উচিৎ।

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

extern int errno ;

int main () {

   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");
	
   if (pf == NULL) {
   
      errnum = errno;
      fprintf(stderr, "Value of errno: %d\n", errno);
      perror("Error printed by perror");
      fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
   }
   else {
   
      fclose (pf);
   }
   
   return 0;
}

উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করা হলে নিচের ন্যায় ফলাফল দেখাবেঃ

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

0(শূন্য) দিয়ে ভাগের ফলে উৎপন্ন Error

প্রায় সময়েই প্রোগ্রামাররা কোনো সংখ্যাকে ভাগ করার সময় ভাজক শূন্য কিনা চেক করে দেখে না যা পরিশেষে রান টাইম এরর(runtime error) উৎপন্ন করে।

নিচের প্রোগ্রামে ভাগ করার পূর্বে ভাজক 0(শূন্য) কিনা চেক করার মাধ্যমে এই সমস্যার সমাধান দেখানো হলোঃ

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

int main() {

   int dividend = 20;
   int divisor = 0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "Division by zero! Exiting...\n");
      exit(-1);
   }
   
   quotient = dividend / divisor;
   fprintf(stderr, "Value of quotient : %d\n", quotient );

   exit(0);
}

উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করা হলে ইহা নিচের ন্যায় ফলাফল দেখাবেঃ

Division by zero! Exiting...

প্রোগ্রাম থেকে বের হওয়ার স্ট্যাটাস

প্রোগ্রামের কাজ সফলভাবে সম্পন্ন হওয়ার পরে প্রোগ্রাম থেকে সচারচর EXIT_SUCCESS এর স্ট্যাটাস ভ্যালু নিয়ে বের হয়। এখানে EXIT_SUCCESS হলো ম্যাক্রো এবং ইহাকে 0 দ্বারা সঙ্গায়িত করা হয়।

আপনার প্রোগ্রামে যদি কোনো এরর(error) থাকে এবং আপনি যদি প্রোগ্রাম থেকে বের হতে চান তাহলে EXIT_FAILURE স্ট্যাটাস নিয়ে আপনাকে প্রোগ্রাম থেকে বের হতে হবে যাকে -1 দ্বারা সঙ্গায়িত করা হয়।

সুতরাং চলুন উপরের প্রোগ্রামকে নিচের মত করে লিখিঃ

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

int main() {

   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0) {
      fprintf(stderr, "Division by zero! Exiting...\n");
      exit(EXIT_FAILURE);
   }
	
   quotient = dividend / divisor;
   fprintf(stderr, "Value of quotient : %d\n", quotient );

   exit(EXIT_SUCCESS);
}

উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করা হলে ইহা নিচের ন্যায় ফলাফল দেখাব:

Value of quotient : 4