2

我有一个任务,我试图找出两种方法来做一件事。我这里有代码

#include <stdio.h>
int main(void)

{
    char first[10];
    int length;


  printf("what is your first name?\n");
  scanf("%s", &first);
  length = strlen(first)+3;
  printf("%d\n", length);
  printf("Hi \"%s\"\n", first);
  printf("Hi \"%20s\"\n", first);
  printf("Hi \"%-20s\"\n", first);
  printf("Hi \"%8s\"\n", first);
  return 0; 
}

整体还算简单。然而,最后的声明

printf("Hi \"%8s\"\n", first);

是我想做的不同的事情。该语句的标准是将其打印在比名称宽 3 个字符的字段中。我的名字叫 Chris,我知道 8 个字符宽可以实现这一点,但是,我想知道是否可以使用我创建的长度变量并在下面执行类似的操作,这样我就不必知道提前命名。

printf("Hi \"%[Length]s\"\n", first);

我知道这行不通,但我认为它可以传达这个想法。

4

3 回答 3

7

使用附加参数指定宽度:

printf("Hi \"%*s\"\n", length, first);

(注意*而不是字段宽度)。

于 2013-06-14T14:33:03.797 回答
6

您可以使用星号而不是特定的带值来指示宽度将被指定为另一个参数:

printf("Hi \"%*s\"\n",length,first);
于 2013-06-14T14:32:51.057 回答
5

你要:

printf("Hi \"%*s\"\n", length, first);

*是一个可选的字段宽度,并且length必须是一个int参数。

于 2013-06-14T14:32:53.833 回答