为我提供了一个文件,该文件的开头用0表示了几个配方。每个配方后面都带有用1表示的配料,如下所示:
char *rawRecipes[]={
"0Broccoli Coleslaw",
"1olive oil",
"1white vinegar",
"1white sugar",
"1package chicken flavored ramen noodles",
"1broccoli",
"1carrots",
"1green onions",
"1sunflower seeds",
"0Creamy Broccoli Salad",
"1broccoli",
"1red onion",
我正在尝试按字母顺序对列表中的成分进行排序,但出现了细分错误。非常感谢您的帮助。这是我所做的:
int main(void)
{
int input;
printf("\n");
printf("\n");
printf("Enter a command by number\n");
printf("4. List All Ingredients in alphabetical order\n");
printf("Give input: ");
scanf("%d", &input);
if (input == 4) // List All Ingredients in alphabetical order
{
int i = 0,k;
char alphabet[1000] ;
while(strcmp(rawRecipes[i], "") !=0)
{
if(rawRecipes[i][0] == 1 && rawRecipes[i+1][0] == 1)
{
char temp;
for(k=0; k<250; k++)
{
alphabet[k] = rawRecipes[i];
alphabet[k + 1] = rawRecipes[i + 1];
}
if(strcmp(alphabet[i], alphabet[i + 1] > 0))
{
temp = alphabet[i];
strcpy(alphabet[i], alphabet[i + 1]);
strcpy(alphabet[i + 1], temp);
}
}
i++;
}
int m;
for(m=0; m < 250; m++)
{
printf("%d: %c", m, alphabet[m]);
}
}
return 0;
}
答案 0 :(得分:0)
在此代码中:
int i,k;
char alphabet[1000] ;
while(strcmp(rawRecipes[i], "") !=0)
您期望i
的值是什么?
该值是不确定的,可能是0,-10000或10000000。某些可能的值将在循环的第一次迭代时立即导致立即崩溃,同时尝试构造strcmp
的参数(由于i
超出了访问rawRecipes
的范围)。
您可能想要:int i = 0, k;
。
还有其他错误。
您应该真正学习如何使用调试器和how to debug small programs。
在调试之前,您应该打开编译器警告,并修复编译器将告诉您的所有错误。
这里是GCC的一位:
t.c:41:37: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
41 | alphabet[k] = rawRecipes[i];