2013-10-07 57 views
2

我想下面的代碼的輸出作爲如何使用 b

刪除換行符 - | -2 | -

(當我輸入鍵的值作爲2)。我知道\ b只是將光標移回1個空格後面,但爲什麼在使用換行符輸入鍵值之後無法移回一個空格。使用換行符後是否可以使用轉義字符\ b?

#include<stdio.h> 
#include<conio.h> 

int main() 
{ 
    int key; 
    printf("Enter value of key:)" 
    printf("-|-"); 
    scanf("%d",&key); 
    printf("\b-|-"); 
    return 0; 
} 
+0

爲什麼不使用sprintf? – Joze

+0

沒有'c'中沒有特殊字符可以回退一行。 –

+0

「這是問題,這是解決方案,解決方案不起作用。」 - 那麼,這不是解決方案。事實上,這個特定問題沒有便攜式解決方案。什麼是操作系統? – MSalters

回答

4

您使用作爲輸出設備的終端不具有任何文本行的概念:它所知道的只是一個單元格的網格,每個單元格都可以由一個字符填充。其中一個單元格位置是當前單元格。

終端將BS字符解釋爲將當前單元向左移動一列的指令。但是如果你已經在第一欄中會發生什麼?終端不知道上一行結束的位置,所以它不能回到行尾。它可以回到上面那一行的最後一列,有些終端可能可以配置成這樣做,但這不可能是你想要的。

這是過分簡化,但它基本上爲什麼\b不會刪除換行符。

+0

好的,現在我明白了。 – APan

4

下面是一個簡單的解決方案:

#include<stdio.h> 

int main() 
{ 
    int key; 
    char output[8] = {'\0'}; 

    printf("Enter value of key:)"; 
    scanf("%d",&key); 
    sprintf(output,"-|-%d-|-",key); 
    printf("%s\r\n",output); 

    return 0; 
} 
+0

哈哈..偉大的思想想象一樣 – sukhvir

+2

任何理由包括非標準'conio.h'? – ComicSansMS

+0

不,你是對的(只是複製並粘貼他的原代碼),我刪除它。 – Joze

3

這是一個更簡單的方法來獲得相同的結果:

#include<stdio.h> 


int main() 
{ 
    int key; 
    char buffer[whatever_size]; 
    printf("Enter value of key: "); 

    scanf("%d",&key); 
    sprintf(buffer,"-|-%d-|-",key); 

    printf("%s\n",buffer); 
    return 0; 
} 
+0

aa gaya meinu samjh thanx – APan

+0

chal vadiya ..不用擔心 – sukhvir