-1

我使用 geany 编译我的代码,没有发现任何错误。但是当我运行 .exe 文件时,程序停止工作,而且我不是一个好的程序员,这是学校的工作。

我的程序包括阅读 2 个单词,在这个单词中,它会计算每个单词有多少个字母,然后他将 wordA 中的字母数除以 wordB 中的字母数。

这是我的代码

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i, j;
    float n;

    printf ("Insert first word:\n");

    for(i=0; argv[1][i] != '\0'; i++);

    printf ("Insert second word:\n");

    for(j=0; argv[2][j] != '\0'; j++);

    n=i/j;

    printf("%.4f", n);

    return 0;
}
4

2 回答 2

2

在这一行

n = i/j;

您正在执行整数除法。因此,例如,假设i是 3 并且j是 5,那么您执行3/5which equals 0

但我认为你正在寻找表演3.0/5.0并希望得到答案0.6。所以你需要执行浮点除法。您可以通过将其中一个操作数转换为浮点数来强制执行此操作。

n = (float)i/j;

在你写的问题中,Int而不是int. 问这个问题时,我认为这是一个转录错误。但也许你的真实代码看起来像这样。在这种情况下,您需要将其更改为int才能编译。

您遇到的另一个可能的问题是程序希望在命令行上传递参数。您是否将两个参数传递给您的程序?换句话说,您需要像这样执行您的程序:

program.exe firstword secondword

如果您没有传递参数,那么在尝试访问argv[]. 至少您应该在程序中添加一个检查以确保argc==3.

如果您想从 读取输入stdin,而不是传递命令行参数,请使用scanf.

于 2013-05-04T13:16:41.190 回答
1

我认为这是一个概念错误。当这样调用时,您的程序(可能)运行良好:

myapp word1 word2

但我认为你希望它像这样工作:

myapp
Insert first word:
> word1
Insert second word:
> word2

但这不是argv问题所在。你应该调查scanf

具体来说,第二种情况的错误是因为argv[1]是NULL,所以argv[1][i]是错误的内存访问。

于 2013-05-04T13:24:46.923 回答