............................................... .................................................. .................................................. ........
大家好,当我在数组中搜索元素时,我遇到了一些问题
当我输入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 ;
}
谢谢你的帮助.......................................... .................................................. .................................................. .................................................. .................................................. .................................................. ........
答案 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。