در زبان C، خط جدید یا Newline یک کاراکتر کنترلی است که مکاننمای خروجی را به ابتدای خط بعدی منتقل میکند. این کاراکتر با دنبالهٔ فرار \n نمایش داده میشود و یکی از پرکاربردترین کاراکترهای کنترلی در برنامهنویسی C محسوب میشود .
برخلاف برخی زبانهای سطحبالاتر که توابع جداگانهای برای چاپ با خط جدید دارند، در C این کاراکتر بخشی از رشتهٔ خروجی است و برنامهنویس باید بهصورت دستی آن را مدیریت کند .
\n — نحوه و مکان استفادهکاراکتر \n یک کاراکتر فرار است که در هر جایی از رشتهٔ چاپی قرار گیرد، باعث ایجاد یک خط جدید میشود:
#include <stdio.h> int main() { printf("Hello\nWorld"); return 0; }
خروجی در ترمینال:
Hello World
همانطور که مشاهده میشود، \n متن را به دو بخش تقسیم کرده و بخش دوم را در خط بعدی چاپ میکند.
\n در ابتدا، میانه یا انتهای رشتهکاراکتر \n میتواند در هر نقطهای از رشته قرار گیرد:
printf("\nStart"); // یک خط خالی قبل از "Start" ایجاد میکند printf("Middle\nEnd"); // "Middle" در خط جاری، "End" در خط بعدی printf("End\n"); // "End" را چاپ کرده و سپس به خط بعدی میرود
خروجی:
Start Middle End End
نکته حرفهای: قرار دادن
\nدر انتهای هر خروجی، یک رویهٔ استاندارد در برنامهنویسی C است. این کار باعث میشود که پرامپت ترمینال در خط جدید ظاهر شود و خوانایی خروجی افزایش یابد .
\n در سیستمعاملهای مختلفیکی از نکات مهم در مورد کاراکتر خط جدید، تفاوت آن در سیستمعاملهای مختلف است:
| سیستمعامل | دنبالهٔ خط جدید | توضیح |
|---|---|---|
| Unix/Linux/macOS | \n (LF) | Line Feed — رایجترین استاندارد در سیستمهای شبهیونیکس |
| Windows | \r\n (CRLF) | Carriage Return + Line Feed — دو کاراکتر برای رفتن به ابتدای خط و سپس خط جدید |
| Mac (قدیمی) | \r (CR) | Carriage Return — فقط در نسخههای بسیار قدیمی |
نکته بسیار مهم: در خودِ زبان C و هنگام کار با printf()، همیشه از \n استفاده میشود، صرفنظر از سیستمعامل. کتابخانهٔ استاندارد C در زمان اجرا (Runtime) این کاراکتر را به دنبالهٔ مناسب برای سیستمعامل مقصد تبدیل میکند :
// در هر سه سیستمعامل، این کد بهدرستی خط جدید ایجاد میکند printf("This is a new line\n");
اگر بخواهید بهصورت دستی از \r\n استفاده کنید، در سیستمهای Unix ممکن است یک کاراکتر اضافی (\r) در خروجی دیده شود که معمولاً نامطلوب است. بنابراین، همیشه از \n استفاده کنید و به کتابخانهٔ C اجازه دهید تا تبدیل مناسب را انجام دهد .
\n با سایر کاراکترهای فرارکاراکتر \n بهراحتی با سایر کاراکترهای فرار ترکیب میشود تا خروجیهای پیچیدهتری ایجاد کند:
printf("Name:\tJohn\nAge:\t25\n");
خروجی:
Name: John Age: 25
در این مثال، \t (تب) برای ایجاد فاصلهٔ افقی و \n برای خط جدید استفاده شده است.
برای ایجاد خطوط خالی، میتوانید از چندین \n پشت سر هم استفاده کنید:
printf("Line 1\n\n\nLine 2");
خروجی:
Line 1 Line 2
دو خط خالی بین "Line 1" و "Line 2" ایجاد شده است.
puts()تابع puts() برخلاف printf()، بهصورت خودکار یک \n به انتهای خروجی اضافه میکند:
puts("Hello"); // معادل printf("Hello\n"); puts("World"); // معادل printf("World\n");
خروجی:
Hello World
نکته:
puts()فقط برای چاپ رشتههای ساده مناسب است و قالببندی (مانند%dبرای متغیرها) را پشتیبانی نمیکند. برای چاپ متغیرها همچنان باید ازprintf()استفاده کنید .
\n با printf()اگر از printf() بدون \n استفاده کنید، خروجی در همان خط ادامه مییابد که ممکن است منجر به نمایش نامناسب در ترمینال شود:
printf("Hello"); printf("World");
خروجی:
HelloWorld
و پرامپت بعدی بلافاصله بعد از "World" ظاهر میشود که از نظر بصری نامناسب است.
/n بهجای \nیکی از اشتباهات رایج تایپی، استفاده از اسلش جلو (/) بهجای بکاسلش (\) است:
printf("Hello/nWorld"); // اشتباه: /n معنی خاصی ندارد // خروجی: Hello/nWorld (بهصورت متن عادی)
\n در انتهای آخرین خروجیprintf("Result: %d", 42); // ممکن است پرامپت ترمینال بلافاصله بعد از "42" ظاهر شود
راهحل: همیشه در انتهای آخرین خروجی برنامه، یک \n قرار دهید.
\n با کاراکتر جدید در فایلهاهنگام کار با فایلها، رفتار \n ممکن است متفاوت باشد. در حالت متنی (Text Mode)، \n به دنبالهٔ مناسب سیستمعامل تبدیل میشود، اما در حالت باینری (Binary Mode)، این تبدیل انجام نمیشود:
FILE *fp = fopen("file.txt", "w"); // حالت متنی fprintf(fp, "Hello\nWorld"); // در ویندوز: Hello\r\nWorld
\n و \tprintf("ID\tName\t\tScore\n"); printf("1\tAlice\t\t95\n"); printf("2\tBob\t\t87\n"); printf("3\tCharlie\t\t92\n");
خروجی:
ID Name Score 1 Alice 95 2 Bob 87 3 Charlie 92
printfprintf("=== Program Started ===\n"); printf("Processing data...\n"); printf("Data processed successfully!\n"); printf("=== Program Finished ===\n");
خروجی:
=== Program Started === Processing data... Data processed successfully! === Program Finished ===
\n در یک رشتهٔ طولانیprintf("This is a very long message that we want\n" "to split across multiple lines in the source\n" "code for better readability.\n");
خروجی در یک خط خواهد بود مگر آنکه از \n استفاده کنیم:
This is a very long message that we want to split across multiple lines in the source code for better readability.
کاراکتر \n برای ایجاد خط جدید در خروجی استفاده میشود
\n یک کاراکتر فرار است و با بکاسلش (\) نوشته میشود، نه اسلش جلو (/)
کتابخانهٔ استاندارد C، \n را به دنبالهٔ مناسب سیستمعامل تبدیل میکند
برای خوانایی بهتر و نمایش صحیح پرامپت ترمینال، همیشه خروجیها را با \n به پایان برسانید
تابع puts() بهصورت خودکار \n اضافه میکند اما فقط برای رشتههای ساده کاربرد دارد
ترکیب \n با کاراکترهای دیگری مانند \t امکان ایجاد خروجیهای منظم و جدولی را فراهم میکند
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات