1

したがって、Cでchar配列のセグメントのみを印刷することについて多くの質問があることを知っており、それらを読みました。私の質問は本質的に似ていますが、少しひねりがあります。以下のコードの場合、fmt配列の最初の 4 文字だけを出力するにはどうすればよいですか? 変更は許可されていないため、値、改行、および 1 つのスペースのみを出力することを指定するfmtために使用する必要があります。VAL

#define VAL 4
int main() {
   char fmt[10] = "%d\n   ";
   int value = 1;
   printf(fmt, value);
}

編集:

必要なのはこれだけだと感じたので、これは私のコードのほんの一部です。さらに必要な場合は、残りのコードを提供します。

EDIT2:

制限: 新しい変数はありません & 出力する fmt 配列の量を指定するには、VAL を使用する必要があります。

EDIT3 (完全な質問):

変数宣言を追加せずに、プログラムの不足部分を埋めます。入力した整数値をどのように出力するかをユーザーに選択してもらいます。(すべてがわからない場合は、printf の整数書式指定子を調べてください。) 指定された書式指定子文字を使用して、以前に入力された整数を出力し、その後に return を入力してから、別の書式文字を再プロンプトします (ただし、新しい整数)。複雑さの限界を下回ることは、課題の主要な部分です。どの種類のループを選択するか、および書式指定子文字をどのように読み取るかについては柔軟に対応してください。また、フォーマット文字列の %c の前に空白がある場合、scanf は文字を読み取るときに空白をスキップすることに注意してください。また、その VAL 定義には重要な用途があり、出力内の偽の空白を取り除くことが含まれます。そして最後に、さえしないでください大きなスイッチまたは if- elseブロックでこれを行うことを検討してください。

#include <stdio.h>
#define VAL 4  // You might want this

int main() {
   char fmt[10] = "%d\n   "; // Quickly initializes fmt array 
   int value;

   printf("Enter an integer: ");
   scanf("%d", &value);
   //from here below is my code, above code is pre-provided
   printf("Enter a format specifier (x, X, c, d, i, o, or q to quit): ");
   scanf(" %c", &fmt[1]);

   while (fmt[1] != 'q') {
      printf("%4s", fmt, value);
      printf("Enter a format specifier (x, X, c, d, i, o, or q to quit): ");
      scanf(" %c", &fmt[1]);
   }
}
4

3 に答える 3

3

fmt配列の最初の4文字だけを出力するにはどうすればよいですか

どうですか:

printf("%4s", fmt);

fmtの%dに何を出力するかを指示するための変数値が必要なため、機能しません。

オプション:

  • snprintf次の長さを使用して別の文字列()に出力します4
  • 適切な桁数が含まれるまで番号を処理してから、印刷します
于 2013-01-13T22:46:46.787 に答える
2

cnicutars に非常に良い答えを追加します。配列が const でない場合は、それを変更できることを指摘したいと思います。

char saved = fmt[4];
fmt[4] = '\0';
printf (fmt, value);
fmt[4] = saved;

編集

元の質問で指定したように、配列は変更できません。

はい、そうですね...元の const フォーマット文字列を変更できないと誤解して考えました。とはいえ、このちょっとした情報は誰かの役に立つと思います。

于 2013-01-13T22:53:50.433 に答える
0

入力から値を読み取った後、印刷は次のようになります。

printf("%.*s", VAL, fmt, value);
于 2013-01-13T23:11:06.920 に答える