\n
(Yeni satır) ve \r
(satır başı ) arasındaki fark nedir ?
Özellikle, ve arasında pratik farklılıklar var mı? Biri yerine diğerinin kullanılması gereken yerler var mı?\n
\r
\n
(Yeni satır) ve \r
(satır başı ) arasındaki fark nedir ?
Özellikle, ve arasında pratik farklılıklar var mı? Biri yerine diğerinin kullanılması gereken yerler var mı?\n
\r
Yanıtlar:
Ascii kodu açısından, 3 - sırasıyla 10 ve 13 oldukları için ;-).
Ama cidden, birçok var:
\n
satır sonu kodudur, \r
özel bir şey ifade etmez\n
satır sonu için standart kaçış dizisidir (gerekirse OS'ye özel dizilere / gerektiğinden çevrilir)\r
satır sonu koduydu\r\n
bu sırayla 2 karakterdir\r\n
İnternet'teki metin formatları için standart satır sonlandırmasıdır\r
taşıyıcının en soldaki durağa (yavaş bir işlem) varana kadar sola geri gitmesini \n
emreder, silindire tek bir çizgi (çok daha hızlı bir işlem) sarması için komut verir - bu nedenle her zaman \r
Daha önce \n
, şaryo hala sola giderken silindirin hareket edebilmesi için! -) Wikipedia'nın daha ayrıntılı bir açıklaması var .\r
ve \n
orada olarak, imleç açısından hem de dışında (benzer şekilde hareket olan bir taşıyıcı ya da silindir ;-)Pratikte, bir metin dosyasına yazmanın modern bağlamında, her zaman kullanmalısınız \n
(temel çalışma zamanı, garip bir işletim sistemindeyseniz, örneğin Windows ;-). Kullanmanın tek nedeni, \r
bir karakter terminaline (veya büyük olasılıkla onu taklit eden bir "konsol penceresi") yazıyorsanız ve yazdığınız bir sonraki satırın, az önce yazdığınız son satırın (bazen goofy için kullanılır) ascii animasyonunun üzerine yazmasını istiyorsanız "örneğin ilerleme çubuklarının etkileri) - bu, GUI'lerin dünyasında oldukça eskidir ;-).
\0
) eklendi. \n
saati. Bu, işletim sistemi tarafından şeffaf bir şekilde ele alındı, böylece eski kodda herhangi bir iz bulamazsınız.
\r
(Linux kullanıyorum) unuttuğum için oldukça kötü bir deneyim yaşadım . Ayrıştırmaya başladığımda, geçerli bir dosya gibi görünen dosyaları ayrıştırmaya başladım çünkü ayrıştırdığım dosya Windows'da oluşturuldu. : D de bu tüm temel sorun \n
veya \r
anlamda görünür olan, örneğin a
, .
, (
vb karakterlerdir.
Tarihsel olarak a \n
taşıyıcıyı aşağı \r
taşımak için, taşıyıcıyı sayfanın sol tarafına geri taşımak için kullanılmıştır.
printf("abcdefghijlm\rNOP\n");
OpenSuSe üzerinde gcc-8 ile derlenir ve bir terminalde çalıştırıldığında bu çıktı elde edilir NOPdefghijlm
. Dizgideki \ r (satırbaşı), imlecin satırın başına (satır başı) hareket etmesine ve \ r (yani "NOP") öğesinin ardından gelen karakterlerin önceden orada olanın üzerine yazılmasına neden olur (yani "abc")! Gibi Sen geri al (\ b) ile benzer "taşıma hareketi" elde edebilirsiniz printf("abcdefghijlm\b\bNOP\n");
üretenabcdefghijNOP
İki farklı karakter.
\n
Unix metin dosyalarında satır sonu sonlandırıcısı olarak kullanılır
\r
Mac metin dosyalarında satır sonu sonlandırıcı olarak kullanılır
\r\n
(yani her ikisi de) Windows ve DOS metin dosyalarındaki satırları sonlandırmak için kullanılır.
\r
Mac'te uzun zamandır satır sonu olmamıştır. Mac OS X'in 2001 yılında piyasaya sürülmesiyle (Unix tabanlı) \n
artık kullanılmaktadır.
\r
- örneğin MS Office 2011 Excel: CSV'yi kaydetme (tüm varsayılan ayarlarla) - \r
satır sonları olan bir ISO-8859-1 kodlu dosyayı kaydedecektir .
Kimse özel olarak bahsetmediği için (bilmek / hatırlamak için çok mu gençler?) - \r\n
Daktilo ve benzeri cihazlar için kullanıldığından şüpheleniyorum .
Çok satırlı daktilo kullanırken yeni bir satır istediğinizde, gerçekleştirmesi gereken iki fiziksel işlem vardı: şaryoyu sayfanın başına (solda, ABD'de) kaydırın ve kağıdı bir çentik yukarı besleyin .
Örneğin, satır yazıcılarında kalın metin yapmanın tek yolu, satır başı olmadan satır başı yapmak ve aynı karakterleri eskilerinin üzerine yazdırmak, böylece daha fazla mürekkep eklemek, böylece daha koyu görünmesini sağlamaktı (kalın) . Mekanik "yeni satır" işlevi bir daktiloda başarısız olduğunda, bu can sıkıcı bir sonuçtu: dikkat etmiyor olsaydınız, önceki metin satırını yazabilirsiniz.
Farklı İşletim Sistemleri için iki farklı karakter. Ayrıca bu, iletilmesi TCP/IP
gereken verilerin kullanılmasında rol oynar\r\n
.
\n
Unix
\r
Mac
\r\n
Windows ve DOS.
Tamamlamak,
Bir kabuk (bash) komut dosyasında, \r
imleci satırın önünde ve elbette \n
imleci yeni bir satıra koymak için kullanabilirsiniz.
Örneğin, şunu deneyin:
echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
AA--AA
AA--AABB
BB--AABB
Ancak -en
parametre olarak kullanmayı unutmayın .
Pencerelerde, \ n sonraki satırın başına gider. \ R, bir sonraki satıra geçmeden geçerli satırın başına gider. Bazı kodları test ettiğim kendi konsol uygulamalarında kullandım ve metnin ekranımın yukarı kaydırıldığını görmek istemiyorum, bu yüzden bir kare hızı ( FPS) yazdırırsam f ("% - 10d \ r", fps); Bu, imleci bir sonraki satıra geçmeden satırın başına döndürür ve ekranda aynı satırda sürekli olarak güncellenirken kaydırılmayacak başka bilgilerim olmasını sağlar (% -10 çıktının en az 10 karakter olduğundan, boşlukla doldurulmuş olarak sonlandırıldığından, bu satır için eski değerlerin üzerine yazılır). Bunun gibi şeyler için oldukça kullanışlı,
Biraz tarih
/ R, geçmişini daktiloya borçlu olan "dönüş" veya "satırbaşı" anlamına gelir. Satır başlangıcında yazdığınız bir satır başı, satır sonunu sağa kaydırdı.
/ N, yine daktilo günlerinden yeni bir satıra geçtiğinizde "yeni satır" anlamına gelir. Gerçi bunun başlangıcına kadar değil, bu yüzden bazı işletim sistemleri hem a / r dönüşü, hem de / n satırsonu ihtiyacını benimsedi, çünkü bir daktilonun yaptığı sipariş buydu. tanıdık olan "satır başı" ifadesinden "Enter" yerine "Dönüş" seçeneğine sahip olmak.
Sadece karışıklığa eklemek için, bir tarayıcıdaki bir HTML sayfasında bir TextArea öğesi kullanarak basit bir metin editörü üzerinde çalışıyorum. CR / LF ile ilgili uyumluluk sorunlarıyla ilgili olarak, platformu kontrol etmek için kod yazdım ve platform için geçerli olan yeni satır sözleşmesini kullanın.
Ancak, TextArea'da bulunan gerçek karakterleri kontrol ederken, karakterlere karşılık gelen onaltılık verileri üreten küçük bir JavaScript işlevi aracılığıyla ilginç bir şey keşfettim .
Test için aşağıdaki metni yazdım:
Merhaba Dünya [enter]
Güle güle, Zalim Dünya [gir]
Metin verilerini incelediğimde, elde ettiğim bayt dizisi şuydu:
48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 0a 47 6f 6f 64 62 79 65 2c 20 43 72 75 65 6c 20 57 6f 72 6c 64 0a
Şimdi, buna bakan ve 0a'yı ancak 0d bayt görmeyen çoğu insan, bu çıktının bir Unix / Linux platformunda elde edildiğini düşünüyor. Ancak, işte sürtünme: Windows 7 64 bit'te Google Chrome'da elde ettiğim bu sıra.
Bu nedenle, bir TextArea öğesi kullanıyorsanız ve metni inceliyorsanız, TextArea'nızdan hangi gerçek karakter baytlarının döndürüldüğünden emin olmak için çıktıyı yukarıda yaptığım gibi kontrol edin. Bunun diğer platformlarda veya diğer tarayıcılarda farklılık gösterip göstermediğini henüz görmedim, ancak JavaScript aracılığıyla metin işleme yapıyorsanız ve bu metin işleme platformunu bağımsız hale getirmeniz gerekiyorsa akılda tutulması gerekir.
Yukarıdaki yazılarda yer alan kurallar konsol çıktısı için geçerlidir , ancak HTML öğeleri UNIX / Linux kuralına uygundur. Birisi farklı bir platformda / tarayıcıda başka türlü bulmazsa.
#include <stdio.h>
void main()
{
int countch=0;
int countwd=1;
printf("Enter your sentence in lowercase: ");
char ch='a';
while(ch!='\r')
{
ch=getche();
if(ch==' ')
countwd++;
else
countch++;
}
printf("\n Words = ",countwd);
printf("Characters = ",countch-1);
getch();
}
Bu örneği alalım \ n yerine işe yaramaz ve niçin tahmin etmeye çalışalım?
Return
ve Enter
. Modern kablosuz klavyem bile eski Return
tuşta aşağı ve geri oku gösteriyor (şimdi sayısal tuş takımının Enter
oku göstermeyen tuş ile tutarlı olması için "Enter" olarak adlandırılıyor )
\ N (yeni satır) ve \ r (satır başı) arasındaki fark nedir?
Özellikle,
\n
ve arasında pratik farklılıklar var\r
mı? Biri yerine diğerinin kullanılması gereken yerler var mı?
\n
Newline için ilgili kaçış dizileriyle kısa bir deney yapmak istiyorum ve\r
başı aralarındaki belirgin farkın nerede olduğunu göstermek istiyorum.
Bu sorunun dilden bağımsız olarak sorulduğunu biliyorum. Bununla birlikte, en azından deneyi gerçekleştirmek için bir dile ihtiyacımız var. Benim durumumda, C ++ seçtim, ancak deney genellikle herhangi bir programlama dilinde uygulanacaktır.
Program sadece bir for döngüsü bir döngü için yapılan bir cümle yazdırmak için tekrarlar.
Newline programı:
#include <iostream>
int main(void)
{
for(int i = 0; i < 7; i++)
{
std::cout << i + 1 <<".Walkthrough of the for-loop \n"; // Notice `\n` at the end.
}
return 0;
}
Çıktı:
1.Walkthrough of the for-loop
2.Walkthrough of the for-loop
3.Walkthrough of the for-loop
4.Walkthrough of the for-loop
5.Walkthrough of the for-loop
6.Walkthrough of the for-loop
7.Walkthrough of the for-loop
Bu sonucun herhangi bir sistemde sağlanmayacağına dikkat edin, bu C ++ kodunu çalıştırıyorsunuz. Ancak en modern sistemler için çalışacaktır. Daha fazla ayrıntı için aşağıyı okuyun.
Şimdi, aynı program, ancak fark ile, bu \n
, \r
yazdırma sırasının sonunda ile değiştirilir .
Taşıma iade programı:
#include <iostream>
int main(void)
{
for(int i = 0; i < 7; i++)
{
std::cout << i + 1 <<".Walkthrough of the for-loop \r"; // Notice `\r` at the end.
}
return 0;
}
Çıktı:
7.Walkthrough of the for-loop
Farkın nerede olduğunu fark ettiniz mi? Fark, \r
her yazdırma dizisinin sonunda Satır Başı kaçış dizisini kullandığınızda, bu dizinin bir sonraki yinelemesi aşağıdaki metin satırına girmez - Her yazdırma dizisinin sonunda, imleç sonraki satırın * başlangıcına atladı.
Bunun yerine, imleç \r
karakteri kullanmadan önce sonunda bulunduğu satırın başına atladı . - Sonuç, baskı sırasının her yinelemesinde bir öncekinin yerini almasıdır.
* Not: A \n
mutlaka aşağıdaki metin satırının başına atlamaz. Bazılarında, genel olarak daha yaşlı olan işletim sistemlerinde, \n
yeni satır karakterinin sonucu, yalnızca başlangıçta değil, bir sonraki satırda herhangi bir yere atlaması olabilir. Bu nedenle, bir \r \n
sonraki metin satırının başlangıcına ulaşmak için kullanmak için istekte bulunurlar .
Bu deney bize çıktı bağlamında satırsonu ve satır başı arasındaki farkı gösterdi bir baskı dizisinin yinelemesinin .
Girdi hakkında tartışırken programdaki , bazı terminaller / konsollar daha iyi taşınabilirlik, uyumluluk ve bütünlük için dolaylı olarak satır başı yeni satırına dönüştürebilir.
Ancak, birini diğeri için seçme seçeneğiniz varsa veya sadece belirli bir tanesini açıkça kullanmak istiyorsanız veya ihtiyacınız varsa, her zaman amacına uyan ve kesinlikle ayırt etmekle çalışmalısınız.