簡體   English   中英

如何在C中讀取換行符

[英]how to read newline character in c

有人可以解釋以下代碼

#include<stdio.h>
main()
{
    char c[]="abc\nabc";
    puts(c);
}

此代碼按預期生成:

abc
abc

但是,當我嘗試使用與用戶輸入相同的字符串時,

#include<stdio.h>
main()
{
    char c[]="abc\nabc";
    gets(c);             // i type in "abc\nabc" 
    puts(c);
}

此代碼生成:

abc\nabc

如何使程序正確讀取換行符?

您確實輸入了\\然后n嗎?

如果是這樣,它將按字面意義在字符串中放置一個\\ ,然后再放置一個n ,就像執行以下操作一樣:

char c[] = "abc\\nabc"; /* note the escaped \ */

從邏輯上講,這不是換行符,而是\\后跟n

如果要在用戶輸入中支持轉義序列 ,則需要對任何用戶輸入進行后處理,以創建適當的轉義序列。

/* translate escape sequences inline */
for (i = 0, j = 0; c[i] != 0; ++i, ++j) {
   if (c[i] == '\\' && c[i+1] != 0) {
       switch(c[++i]) {
       case 'n':  c[j] = '\n'; break;
       case '\\': c[j] = '\\'; break;
       /* add the others you'd like to handle here */
       /* case 'a': ... */
       default:   c[j] = ' ';  break;
       }
   } else {
       c[j] = c[i];
   }
}

c[j] = 0;

在字符串文字中或作為char const,'\\ n'是一個字符,其中\\被稱為轉義字符。 但是作為輸入,“ \\”是一個實字符而不是轉義字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM