C - 运行我编译的.exe文件时出错

时间:2013-05-04 13:13:59

标签: c

我使用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;
}

2 个答案:

答案 0 :(得分:2)

在这一行

n = i/j;

您正在执行整数除法。因此,举例来说,假设i为3而j为5,那么您执行等于3/5的{​​{1}}。

但我认为您希望执行0并希望得到答案3.0/5.0。所以你需要执行浮点除法。您可以通过将其中一个操作数强制转换为浮动来强制执行该操作。

0.6

在您撰写n = (float)i/j; 而不是Int的问题中。我认为在提问时这是一个转录错误。但也许你真正的代码看起来像那样。在这种情况下,您需要将其更改为int以使其编译。

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

int

如果您没有传递参数,那么在尝试访问program.exe firstword secondword 中不存在的参数时,您将遇到运行时错误。至少应该在程序中添加一个检查以确保argv[]

如果要从argc==3读取输入,而不是传递命令行参数,请使用stdin

答案 1 :(得分:1)

我认为这是一个概念错误。你的程序(可能)在这样调用时运行正常:

myapp word1 word2

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

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

但那不是argv的意思。你应该研究scanf

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