我是 C 语言的初学者。我试图在 Code::Blocks 和 Ideone 中运行这段代码,但两者都给了我相同的运行时错误。我尝试将 arr[100]
更改为 arr[101]
并且令人惊讶的是,代码运行了。我也担心poo[t]
的初始化,因为它似乎没有在其中存储sum
的值。或者 sum
可能保留值 0
(可能是 switch
语句不允许 char
情况? )
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[100], t, poo[t], i, j, sum; // refer HOLES
scanf("%d", &t);
for (i=0; i<t; i++) {
scanf("%s", arr);
j=0;
sum = 0;
while (arr[j] != '\0') {
switch (arr[j])
{
case 'B':
sum = sum + 2;
break;
case 'A':
case 'D':
case 'O':
case 'P':
case 'Q':
case 'R':
sum++;
break;
default:
break;
}
j++;
}
poo[i] = sum;
printf("%d", poo[i]);
}
for (i=0; i<t; i++)
{
printf("%d \n", poo[i]);
}
return 0;
}
最佳答案
int arr[100];
scanf("%s", arr);
如果 arr
是一个字符串,它应该声明为 char
数组:
char arr[100];
scanf("%s", arr);
“我也担心 poo[t]
的初始化”
你应该是。以下声明:
int t, poo[t];
scanf("%d", &t);
使用单元化变量 t
调用未定义的行为。
在 t
正确初始化后声明 poo
:
int t = 0;
scanf("%d", &t);
int poo[t];
关于c - 在 C 中使用数组 [100] 时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167980/