Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能帮我找到C语言中的逻辑错误吗?I';我正在尝试fscanf到一个数组和一个变量。_C_Arrays_Variables_Scanf - Fatal编程技术网

有人能帮我找到C语言中的逻辑错误吗?I';我正在尝试fscanf到一个数组和一个变量。

有人能帮我找到C语言中的逻辑错误吗?I';我正在尝试fscanf到一个数组和一个变量。,c,arrays,variables,scanf,C,Arrays,Variables,Scanf,我正在编写一个程序,从main.c调用其他几个函数。在main.c中,我将打开一个包含33个整数的文件,并将前10个整数放入一个数组(a[])。尺码是十号。第11个int将存储在一个变量中,稍后用作seach目标,这就是为什么我称它为target。我尝试了几种不同的方法,试图将第11个整数输入目标。这给了我一个逻辑错误。有人能告诉我错误在哪里吗?我的理解是,逻辑错误有语法上的意义,但代码中的某些东西没有意义,比如试图使用动词而不是介词。我不确定我是否对这一点太陌生而看不到错误,或者我已经盯着它太

我正在编写一个程序,从main.c调用其他几个函数。在main.c中,我将打开一个包含33个整数的文件,并将前10个整数放入一个数组(a[])。尺码是十号。第11个int将存储在一个变量中,稍后用作seach目标,这就是为什么我称它为target。我尝试了几种不同的方法,试图将第11个整数输入目标。这给了我一个逻辑错误。有人能告诉我错误在哪里吗?我的理解是,逻辑错误有语法上的意义,但代码中的某些东西没有意义,比如试图使用动词而不是介词。我不确定我是否对这一点太陌生而看不到错误,或者我已经盯着它太久了。输出显示数组已正确填充,但目标始终为0,因此第11个int被放置在下一个数组中。代码只是一个片段

谢谢你的帮助

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]);
                   }
                 }