有人能帮我找到C语言中的逻辑错误吗?I';我正在尝试fscanf到一个数组和一个变量。
我正在编写一个程序,从main.c调用其他几个函数。在main.c中,我将打开一个包含33个整数的文件,并将前10个整数放入一个数组(a[])。尺码是十号。第11个int将存储在一个变量中,稍后用作seach目标,这就是为什么我称它为target。我尝试了几种不同的方法,试图将第11个整数输入目标。这给了我一个逻辑错误。有人能告诉我错误在哪里吗?我的理解是,逻辑错误有语法上的意义,但代码中的某些东西没有意义,比如试图使用动词而不是介词。我不确定我是否对这一点太陌生而看不到错误,或者我已经盯着它太久了。输出显示数组已正确填充,但目标始终为0,因此第11个int被放置在下一个数组中。代码只是一个片段 谢谢你的帮助有人能帮我找到C语言中的逻辑错误吗?I';我正在尝试fscanf到一个数组和一个变量。,c,arrays,variables,scanf,C,Arrays,Variables,Scanf,我正在编写一个程序,从main.c调用其他几个函数。在main.c中,我将打开一个包含33个整数的文件,并将前10个整数放入一个数组(a[])。尺码是十号。第11个int将存储在一个变量中,稍后用作seach目标,这就是为什么我称它为target。我尝试了几种不同的方法,试图将第11个整数输入目标。这给了我一个逻辑错误。有人能告诉我错误在哪里吗?我的理解是,逻辑错误有语法上的意义,但代码中的某些东西没有意义,比如试图使用动词而不是介词。我不确定我是否对这一点太陌生而看不到错误,或者我已经盯着它太
int main (void)
{
int a[SIZE];
int i;
int j;
int trgt[1];
int target;
FILE* fpmyfile;
int closeResult;
printf("Function working 1.\n");
fpmyfile = fopen("MYFILE.DAT", "r"); // open file myfile
printf("Function opening file.\n");
if(!fpmyfile)
{
printf("Could not open input file.\n");
exit (101);
}
else printf("The file opened.\n");
printf("Starting for loop.\n");
for(j = 1; j <= 3; j++)
{
for(i = 0; i <= SIZE - 1; i++) //get ints from myfile into array
{
if(i != SIZE)
fscanf(fpmyfile, "%d", &a[i]);
else if(i = SIZE)
fscanf(fpmyfile, "%d", &trgt[i]);
}
target = trgt[1];
printf("Scan a done.\n");
printf("\nScanned into a[]");
printf("Target is %3d\n.", target); //This print statement says that target is 0
int main(无效)
{
int a[大小];
int i;
int j;
int-trgt[1];
int目标;
文件*fpmyfile;
结果;
printf(“函数工作1.\n”);
fpmyfile=fopen(“MYFILE.DAT”,“r”);//打开文件MYFILE
printf(“函数打开文件。\n”);
如果(!fpmyfile)
{
printf(“无法打开输入文件。\n”);
出口(101);
}
else printf(“文件已打开。\n”);
printf(“开始循环。\n”);
对于(j=1;j
如果您正在执行赋值,则在else中:i=SIZE
。这在条件上下文中被解释为(i=SIZE)!=0
。您实际上希望在那里进行比较:i==SIZE
,但我永远不会等于SIZE
,因为循环只在SIZE
之前结束一次
要将n
int读入数组,并在不同位置读入以下int,请执行以下操作:
for( i = 0; i < n; ++i ) // reads n ints
{
fscanf(fpmyfile, "%d", &a[i]);
}
fscanf(fpmyfile, "%d", &target); // reads an additional int into target
(i=0;i
我相信你的问题在于,你写&trgt[I]的地方是指&trgt[0](大多数程序员都会使用语义上等价的trgt),而且当你重新分配给target时,你可能指的是target=trgt[0]
同样在你的第二个例子中,如果你用了一个=我怀疑你是想用一个==
不确定您是如何在这里结束的,但在我看来,如果您愿意,您可以直接扫描目标变量。您的错误在于以下代码:
for(i = 0; i <= SIZE - 1; i++) //get ints from myfile into array
{
if(i != SIZE)
fscanf(fpmyfile, "%d", &a[i]);
else if(i = SIZE)
fscanf(fpmyfile, "%d", &trgt[i]);
}
您是否缺少结束语
}
在你的第一篇中,或者你的缩进很笨拙?我更喜欢这篇代码的最终形式,而不是最初的文章。最初的文章是按照人们对这个问题的逻辑思考方式进行概述的。所以我想补充一点,@Piseagan现在继续研究语言的语义,以及风格和优化代码的分解稍后会变得更容易。哦,谢谢!这很有效,很有意义。我喜欢这一个,因为它很简洁。从下面的评论中,我了解到要显示相等,我需要“=”,因为“=”是赋值运算符。此外,数组的索引从0开始,而不是从1开始。谢谢你的帮助!C中的一些编码根本不需要自然地来吧。
for( i = 0; i < n; ++i ) // reads n ints
{
fscanf(fpmyfile, "%d", &a[i]);
}
fscanf(fpmyfile, "%d", &target); // reads an additional int into target
for(i = 0; i <= SIZE - 1; i++) //get ints from myfile into array
{
if(i != SIZE)
fscanf(fpmyfile, "%d", &a[i]);
else if(i = SIZE)
fscanf(fpmyfile, "%d", &trgt[i]);
}
for(i = 0; i <= SIZE - 1; i++) //get ints from myfile into array
{
if(i != SIZE - 1) {
fscanf(fpmyfile, "%d", &a[i]);
}
else {
fscanf(fpmyfile, "%d", &trgt[i]);
}
}