如何使用“%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 开始。
我是 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 开始。