我正在尝试学习C但今天编译程序时它会在执行时崩溃。
我希望我的程序输入三个字符串,将这些字符串的每个字母与索引编号匹配,将这些数字相互添加,然后输出这些数字。
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i, j;
int c = 0;
int e = 0;
int d = 0;
char wrd1[4];
char wrd2[4];
char wrd3[4];
char az[] = "abcdefghijklmnopqrstuvwxyz";
printf("Enter The words ");
printf("\n");
scanf("%s", &wrd1);
printf("\n");
scanf("%s", &wrd2);
printf("\n");
scanf("%s", &wrd3);
int n = sizeof(wrd1) / sizeof(char);
int m = sizeof(wrd2) / sizeof(char);
int o = sizeof(wrd3) / sizeof(char);
for (i = 0; i <= 25; i++)
{
for (j = 0; j <= n; j++)
{
if (az[i] = wrd1[j])
{
c = c + i;
}
}
}
for (i = 0; i <= 25; i++)
{
for (j = 0; j <= m; j++)
{
if (az[i] = wrd2[j])
{
d = d + i;
}
}
}
for (i = 0; i <= 25; i++)
{
for (j = 0; j <= o; j++)
{
if (az[i] = wrd3[j])
{
e = e + i;
}
}
}
printf(c);
printf(d);
printf(e);
}
答案 0 :(得分:3)
您的代码可能存在多个问题,但至少您在此处遇到问题(在多个位置)
for (j = 0; j <= n; j++)
因为<=
你允许函数读取超出这里的数组边界(在你的循环中)
if (az[i] = wrd3[j])
读取数组边界的数组元素是未定义的行为,可能是崩溃的原因(尽管您的代码也可能有其他错误)。
将循环更改为
for (j = 0; j < n; j++)
^
^
确保您不会超越数组边界。
最后,在行
if (az[i] = wrd3[j])
您可能打算使用==
作为您目前的作业,不比较。这不会导致崩溃,但除非您 尝试分配给az[i]
,否则这是一个错误。
答案 1 :(得分:2)
要打印c
的值,您不应使用printf(c);
,而应使用printf("%d\n", c);
。