关于在数组中搜索

时间:2017-12-09 11:49:35

标签: c

............................................... .................................................. .................................................. ........ 大家好,当我在数组中搜索元素时,我遇到了一些问题 当我输入1007这样的数字时,他总是给我Error: Invalid item ID

这是Myfile

1007 5 30

1004 4 10

1003 3 20

这是我的功能

void DisplayItemInfoForAParticularItem(){
    FILE* f = fopen("items.txt", "r");
    int ItemID,ItemQuantity,PricePerUnit, i = 0,flag = 0;
    int ItemI[10], ItemQ[10],Price[10];

    while(fscanf(f,"%d%d%d",ItemI[i],ItemQ[i],Price[i]) != EOF){
        ++i;
    }
    printf("Enter itemID: ");
    scanf("%d",&ItemID);
    for(i=0; i<10; i++)
    {

        if(ItemI[i]==ItemID)
        {
            flag = 1;
            printf("ItemID  Quantity    Price Per Unit (SAR)");
            printf("%d  %d  %d",ItemI[i],ItemQ[i],Price[i]);
            break;
        }
    }
    if(flag==0)
    {
         printf("Error: Invalid item ID");
    }

    fclose(f);
   return ;
}

谢谢你的帮助.......................................... .................................................. .................................................. .................................................. .................................................. .................................................. ........

2 个答案:

答案 0 :(得分:0)

fscanf()scanf()类似,而不是从user进行扫描,而不是从file进行扫描,而是在扫描存储的位置后进行扫描? ItemI[i]应该&ItemI[i]不是吗?

 while(fscanf(f,"%d%d%d",&ItemI[i],&ItemQ[i],&Price[i])>0){
                ++i;

Edit:我认为你想以一种方式输出,但是你用不同的方式写了所以我编辑了你的代码。

int DisplayItemInfoForAParticularItem(){
        FILE* f = fopen("items.txt", "r");
        if(f == 0) {
                printf("file is not present :\n");
                return 0;
        }
        int ItemID,ItemQuantity,PricePerUnit, i = 0,flag = 0;
        int ItemI[10], ItemQ[10],Price[10];

        while(fscanf(f,"%d%d%d",&ItemI[i],&ItemQ[i],&Price[i])>0){
                ++i;
        }

        for(i=0; i<10; i++)
        {
                printf("Enter itemID: ");
                scanf("%d",&ItemID);
                if(ItemI[i]==ItemID)
                {
                        flag = 1;
                        printf("ItemID  Quantity    Price Per Unit (SAR)\n");
                        printf("%d  %d  %d\n",ItemI[i],ItemQ[i],Price[i]);
                        break;
                }
                if(flag==0)
                {
                        printf("Error: Invalid item ID");
                }
        }
        fclose(f);
        return ;
}

我希望它有所帮助。

答案 1 :(得分:0)

您的代码fscanf(f,"%d%d%d",ItemI[i],ItemQ[i],Price[i])会将ItemI[i]ItemQ[i]Price[i]的值传递给fscanf。但是,fscanf需要知道对象的 addressess ,以便它可以在其中存储新值。将该代码更改为fscanf(f, "%d%d%d", &ItemI[i], &ItemQ[i], &Price[i])

此外,当fscanf失败时,请不要依赖EOF返回fscanf。它可能失败不是因为它到达文件的末尾,而是因为它在输入中发现少于三个数字可以被解释为整数,在这种情况下,它返回它在失败之前转换的项目数。所以它可以返回0,1或2.相反,你应该检查FROM openjdk:8u151-jdk-slim EXPOSE 8080 ADD springbootapp-0.0.1.jar app.jar COPY . /root/pythonapp RUN sh -c 'touch /app.jar' RUN apt-get update && apt-get install -y python \ python-gi \ gir1.2-gtk-3.0 ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ] 的返回值是否等于你想要的项目数,3。