【发布时间】:2021-04-20 03:44:34
【问题描述】:
此代码表示分段错误导致程序的 scanf 不起作用。我使用调试器来找出这一点。 scanf(num) 被跳过。因此分段错误。有人能说出为什么 scanf 被跳过了吗?我使用 [^\n] 以便 scanf 可以读取带空格的字符串。帮助。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
int a, b;
scanf("%d %d", &a, &b);
int sumr, maxr;
int sumc, maxc;
int white[b + 1];
white[0] = -1;
int ele[b][a];
for (int opl = 0; opl < a; opl++)
{
for (int pl = 0; pl < b; pl++)
{
ele[pl][opl] = 0;
}
}
char num[100000];
int c = -1;
c:
c++;
scanf("%[^\n]%*c", num);
int hu = 0;
int len = strlen(num);
white[b] = len;
for (int ji = 0; ji < len; ji++)
{
if (isspace(num[ji]))
{
white[hu] = ji;
hu++;
}
}
for (int ft = 0; ft < b; ft++)
{
int lopl = 1;
for (int koi = white[ft + 1] - 1; koi > white[ft]; koi--)
{
ele[ft][c] += lopl * (num[koi] - '0');
lopl = lopl * 10;
}
}
if (a > c)
goto c;
}
【问题讨论】:
-
您的一个问题是
scanf("%d %d", …)在缓冲区中留下了换行符。您的下一个输入是scanf("%[^\n]%*c", …),由于留下换行符而立即失败。正如在下面的一些答案中所指出的,您没有检查您的输入是否成功,因此您的代码在使用未初始化的变量时会出错,这通常会导致不愉快。
标签: c segmentation-fault scanf