首先,此代码(PenaltyShootout.c)用于计算给定字符串中以1开头的1的数量。 " 0" - 没有目标, " 1" - 目标, " 2" - 犯规。
问题:PenatltyShootout.exe停止工作。
#include <stdio.h>
#include <string.h>
int main()
{
int T,i;
char str[100][500];
int n=0;
没有。测试用例是否定的。输入不同字符串以检查代码的工作情况。
do
{
printf("Enter the number of Test cases(must be between 1 and 100):\n");
scanf("%d",&T);
}while(T>100);
我尝试用(char *)str [i] [500]替换str [i] [500]并且警告消失,但PenaltyShootout.exe停止工作。
for(i=0; i<T; i++)
{
printf("Enter the test case %d\n",i);
scanf("%s",str[i][500]);
}
for(i=0; i<T; i++)
{
for(int j=0; j<strlen(str[i])-1; j++)
{
if((str[i][j]=='2')&&(str[i][j+1]=='1')==1)
{
n++;
}
}
这应该打印出犯规后的进球数。
printf("%d\n",n);
}
return 0;
}
答案 0 :(得分:-1)
您对scanf("%s", str[i][500]);
的来电正在将字符串("%s"
)读入字符(str[i][500]
)。
如果您尝试从提示中读取单个字母,则需要将其切换为:
scanf("%c", &str[i][500]);
"%c"
让scanf()
知道您想要一个字母,而&
告诉它使用内存中的字符地址(str[i][500]
,第501个位置在str[i]
(当你只有500个分配时))在哪里放置它。
如果您正在尝试阅读字符串(即单词或句子),则需要将其更像这样:
scanf("%s", str[i]);
在这里,您现在将扫描的字符串放入i
中的str
字符串缓冲区(您已为其分配了500 char
)。