如何使用“%s\n”而不是“%[^\n]”填充二维数组

How to fill a 2d array using "%s\n" instead of " %[^\n]"

我是 C 的新手。我想填充一个二维数组,其中每一行都使用字符串作为输入来填充。 我当前的解决方案如下所示:

char word[2][100]


for (int i = 0; i < 2; i++) {
        scanf(" %[^\n]", word[i]);
}

我大体上理解 %[^\n] 说明符,但不明白为什么在它之前需要 space 才能工作。

当我尝试对 %s 做同样的事情时,事情开始变得奇怪。

char word[2][100]


for (int i = 0; i < 2; i++) {
        scanf("%s", word[i]);
}

它允许 3 个输入而不是 2 个并使我的程序崩溃。

"%s" 跳过前导 white-space,即使没有前导 " ",如 ' ' 和前一行的 '\n' 由于 输入.

由于 " "

" %[^\n]" 也会跳过前导 white-space,否则不会。然后它寻找非'\n'输入。

两者都不好,因为它们缺乏宽度控制并且都无法正确读取


考虑避免 scanf() 并使用 fgets().

char word[2][100] = { 0 };
for (int i = 0; i < 2; i++) {
  char buffer[100 + 1];
  if (fgets(buffer, sizeof buffer, stdin) == NULL) break;
  buffer[strcpsn(buffer, "\n")] = '[=10=]'; // lop off potential trailing \n
  
  strcpy(word[i], buffer);
}

还有其他问题,但可以让 OP 开始。