1

所以我知道有很多关于在 C 中只打印 char 数组段的问题,我已经阅读了它们,虽然我的问题本质上是相似的,但我的问题有一个小转折。鉴于下面的代码,我如何只打印出fmt数组的前四个字符?我不允许更改fmt,因此我必须使用VAL来指定我只想打印值、新行和一个空格。

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

编辑:

这只是我代码的一小部分,因为我觉得这就是所有必要的。如果需要更多,我将提供我的其余代码。

编辑2:

限制:没有新变量&必须使用 VAL 来指定要打印多少 fmt 数组。

EDIT3(完整问题):

填写程序中缺少的部分,不添加任何变量声明。要求用户选择他/她想要如何打印输入的整数值。(如果您不了解它们,请查找 printf 的整数格式说明符。)使用指定的格式说明符字母打印之前输入的整数,然后返回,然后再次提示输入另一个格式字母(尽管不是新整数)。低于复杂性限制是挑战的主要部分。灵活选择哪种类型的循环,以及如何读取格式说明符字符。另外,请注意,如果格式字符串中的 %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 数组的前四个字符

怎么样:

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 回答