2017-01-20 8 views
1

私はコーディングの初心者で、宿題を完成しようとしています。可変長のタブ( t)

私は私の質問を解決しましたが、そうしている間に私は予期しない動作を経験しました。どこ私は、単一の\ t.Hereのための別のタブの長さを取得していますことは、私のコードです:ここでは

#include<stdio.h> 

int calculate_intpart_qutent(int dividend, int diviser); 
int main() 
{ 

    int a; 
    int b; 
    int choice; 


    do 
    { 
     printf("Enter the Dividend (a) :\t"); 
     scanf("%d", &a); 

     printf("\nEnter the Divisor (b) :\t"); 
     scanf("%d", &b); 

     printf("\n\nThe quotient is:\t%d", calculate_qutent(a, b)); 

     printf("\n\nDo you want to try again?(Y\\N):\t"); 
     choice = getchar(); 

     if (choice == '\n') choice = getchar(); 
     printf("\n\n\n"); 

    } while (choice=='y'|| choice=='Y'); 


} 

int calculate_intpart_qutent(int dividend, int diviser) 
{ 
    return (dividend/diviser); 

} 

は私の出力です:

enter image description here

私は最初の両方に単一のタブを使用しているので、 printfステートメント、なぜ私は出力画面で別のタブの長さを得ているのですか?私はここで何か間違っていますか?

私はあなたがダウンボートしてこの質問を埋める前に、私は初心者のCだと考えてください。どんな助けでも大歓迎です。

私はVisual Studio 2017 RCを使用しています。

答えて

4

私は最初のprintfステートメントの両方で単一のタブを使用していたので、なぜ出力画面に別のタブの長さが表示されますか?

タブを使用してください。won't guarantee印刷スペースの数。

printfに固定長を使用する場合は、%-30sのように試してください。文字列が印刷されるためには、3037スペースが保証されます。-は左揃えです。

printf("%-30s", "Enter the Dividend (a) :"); 
    scanf("%d", &a); 

    printf("\n%-30s", "Enter the Divisor (b) :"); 
    scanf("%d", &b); 
+0

ありがとうございました!私にはたくさんのことを意味する。この質問に重複して記入してください。 –

+1

は必須ではありません。引用の質問 – artm

3

'\ t'文字は、テキストを次の '\ t'停止位置に配置します。あなたの場合、タブは8文字ごとに停止します。

printf("Enter the Dividend (a) :\t"); 

'\ t'の前の文字数は24です。したがって、次の '\ t'は8 * 4 = 32番目の位置に配置されます。

printf("\nEnter the Divisor (b) :\t"); 

'\ t' = 23より前の文字数。したがって、次の '\ t'は8 * 3 = 24番目の位置に配置されます。

これは問題ではありませんし、あなたは間違っていません。ターミナルでのタブの動作を理解する必要があります(ユーザーがタブの幅を変更できるため)。 '\ t'を取り除くことができ、@artm answerで述べたようにprintf文で固定長を使うことができます。

+0

技術的には、「C言語ではなく」使用されている端末でタブがどのように挙動するか。 – Vatine

+1

@Vatineが回答で更新されました。 – Rocoder