gpt4 book ai didi

c - 如何限制二维数组的输入,使其不会爆炸?

转载 作者:行者123 更新时间:2023-11-30 18:15:33 26 4
gpt4 key购买 nike

我有一个小程序,我在其中输入要输入的数组的行数和列数,然后输入信息以用数据填充该数组。接下来做什么并不重要,所以我只是省略那部分代码并将 (...) 放入其中。

int main (){
int nl, nc,i,j,z,n;

scanf ("%d %d\n", &nl,&nc);

char matrix [nl] [nc];

for (i=0;i<nl;i++)
for (j=0;j<nc;j++)
scanf(" %c",&matrix[i][j]);
scanf("%d",&n);

int s[n*2];

for (z=0;z<n*2;z++)
scanf("%d",&s[z]);

int y=0;
char s2[n];
for (z=0;z<n*2;z+=2){
s2[y]=matrix [(s[z])-1][(s[z+1])-1];
y++;
}

for (z=0;z<n;z++)
printf ("%c", s2[z]);
return 0;
}

我的问题是,如果输入的字符多于我应该输入的字符,它就会爆炸。例如,如果我的输入是:

2 3
ABC
DEF

这工作得很好。

但是如果我输入:

2 3
ABC
DEFF

它给我一个分段折叠并停止程序。请记住,我在 scanf 中的“%c”之前有一个空格,因此它忽略了“\n”和我在输入中放入的空格。

我该怎么做才能阻止数组中多余的字符爆炸?

最佳答案

scanf("%d",&n);

int s[n*2];

此代码尝试在读取矩阵后扫描并转换输入中剩余的内容。如果输入不是数字(如果您输入的字母多于矩阵应包含的字母),转换将失败并且 n 将保持未初始化状态。那么 int s[n*2]; 是未定义的,因为 n 是不确定的。

如果您想忽略输入中的某些字符,则需要明确执行此操作。您还最好检查所有接受用户输入的函数的返回值,并验证读取的值是否合理。

关于c - 如何限制二维数组的输入,使其不会爆炸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23174703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com