2013-05-04 79 views
-1

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

我的程序包括读取2个单词,换句话说,它将计算每个单词有多少个字母,然后他将单词A中的字母数量除以单词B中的字母数量。

这是我的代码

#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; 
} 
+1

你是否将这些词作为参数传递 – user1937198 2013-05-04 13:17:09

+0

你应该缩进你的代码,并粘贴它,而不是复制它。由于“Int”不是定义的类型,因此它不能编译。 – 2013-05-04 13:19:07

+0

在第一个'printf'之前,你应该插入:'if(argc <3){printf(“Usage:%s \ n”,argv [0]);出口(-1); }' – mah 2013-05-04 13:24:36

回答

2

在这一行

n = i/j; 

您正在执行整数除法。例如,假设i为3,j为5,则执行3/5,其等于0

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

n = (float)i/j; 

在这个问题你写Int而非int。提出这个问题时,我认为这是一个抄写错误。但是也许你的真实代码看起来像这样。在这种情况下,您需要将其更改为int以便进行编译。

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

program.exe firstword secondword 

如果不传递参数,那么你将尝试访问argv[]不存在的参数时遇到运行时错误。至少你应该添加一个检查程序来确保argc==3

如果要读取来自stdin的输入,而不是传递命令行参数,请使用scanf

+0

+1。 'Int'应该是'int'。也许值得一提的是,其他变量将被隐式转换。 – Maroun 2013-05-04 13:17:18

+0

运行程序时仍然给我一个错误 – LatK 2013-05-04 13:19:34

+0

@MarounMaroun显然在真实的代码中,否则编译器会反对。 – 2013-05-04 13:19:42

1

我认为这是一个概念错误。当这样调用你的计划(可能)运行良好:

myapp word1 word2 

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

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

但是,这并不是什么argv左右。你应该看看scanf

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