我使用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;
}
答案 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]
是一个糟糕的内存访问。