Qui*_*irk 1 c arrays initialization char switch-statement
我是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;
}
Run Code Online (Sandbox Code Playgroud)
int arr[100];
scanf("%s", arr);
Run Code Online (Sandbox Code Playgroud)
如果arr是一个字符串,它应该声明为char数组:
char arr[100];
scanf("%s", arr);
Run Code Online (Sandbox Code Playgroud)
"我也担心初始化poo[t]"
你应该.以下声明:
int t, poo[t];
scanf("%d", &t);
Run Code Online (Sandbox Code Playgroud)
使用unitialized变量t调用未定义的行为.
poo在t正确初始化后声明:
int t = 0;
scanf("%d", &t);
int poo[t];
Run Code Online (Sandbox Code Playgroud)