所以我知道有很多关于在 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]);
}
}