如何在C中的char数组之前打印前导空格?

时间:2017-11-17 06:07:18

标签: c

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

char a[30];
char b[30];
scanf("%[^\n]s",a);
scanf(" %[^\n]s",b);
printf("%s \n",a);
printf("%s",b);
return 0;
}

输入:

    hai
        hello

输出:

    hai
hello

但我期待

    hai
        hello

如何在你好之前打印前导空格?

2 个答案:

答案 0 :(得分:1)

请注意%[…](扫描集)是完整的转换规范。代码中的s之后永远不会匹配任何东西,但你无法发现它。换行符保留在输入中。在使用第二个扫描集之前,您必须安排阅读 - 并且格式字符串中的空格(或换行符)不是答案。用s替换%*c可以完成这项工作。但你现在最好不要使用scanf();请改用fgets()

使用scanf()

#include <stdio.h>

int main(void)
{
    char a[30];
    char b[30];
    if (scanf("%29[^\n]%*c", a) == 1 &&
        scanf("%29[^\n]%*c", b) == 1)
    {
        printf("[%s]\n", a);
        printf("[%s]\n", b);
    }
    return 0;
}

输入:

    hai
        hello

输出:

[    hai]
[        hello]

使用fgets()

#include <stdio.h>
#include <string.h>

int main(void)
{
    char a[30];
    char b[30];
    if (fgets(a, sizeof(a), stdin) != 0 &&
        fgets(b, sizeof(b), stdin) != 0)
    {
        a[strcspn(a, "\n")] = '\0';
        b[strcspn(b, "\n")] = '\0';
        printf("[%s]\n", a);
        printf("[%s]\n", b);
    }
    return 0;
}

对于相同的输入,这会产生相同的输出。

答案 1 :(得分:0)

您可以尝试fgets

#include <stdio.h>
int main() {
  char a[30];
  char b[30];
  fgets(a, 30, stdin);
  fgets(b, 30, stdin);
  printf("%s \n",a);
  printf("%s",b);
  return 0;
}