C - 价格查询计划

时间:2016-04-23 18:22:35

标签: c loops

我被要求制作一个C程序,作为一个价格查询'用户输入产品名称,程序将打印存储在文件中的名称和价格。如果文件中没有该项目,程序将告知用户。只要用户想要搜索,程序就会保持循环。我使用Dev C ++进行编码,但是在运行代码之后,程序在几次循环后卡住了,并且它是随机的。你们可以发现我编码的任何问题,还是只是Dev C ++的问题?我在下面提供了我的代码。非常感谢您的帮助。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>

int main()
{
    FILE *items;
    char *mode="r";
    char pName[50];
    float pPrice;
    char p1Name[50];
    int value=0;
    char respond='Y';
    char s[50];

    items=fopen("Product_Name_Price.txt", mode);

    if(items==NULL)
    {
        fprintf(stderr, "Can't open file Product_Name_Price.txt!\n");
        exit(1);
    }

    printf("File has been successfully opened\n");

    do
    {
        printf("Enter the name of the product you wish to look for\n");
        scanf("%s", &p1Name);

        while(strcmp(p1Name, pName) !=0)
        {
            fscanf(items,"%s %f", pName, &pPrice);

            //printf("%s\t%.2f\n", pName, pPrice);

            //value=strcmp(p1Name, pName);

            if(strcmp(p1Name, pName) == 0)
            {
                printf("%s\t%.2f\n", pName, pPrice);
            }   
        }

        /*
        else
        {
            printf("No data in system\n");
        }  
        */

        printf("Do you wish to look up for more item? (Y/N)\n");
        scanf("%s", &respond);

    }while(respond=='Y'|| respond=='y');

    printf("This program is closing\n");

    fclose(items);
}

1 个答案:

答案 0 :(得分:3)

您的程序有未定义的行为,因为您的scanf("%s", &response)读入response,就好像它是一个足够大的数组,用于读取字符串 - 该字段至少 2 (包括null终止符),但response只是一个字符。你爆炸了你的堆栈和损坏的内存,然后所有的赌注都关闭了。

您可以编写scanf("%c", &response)来实际读取单个字符,但如果您正在编写C ++程序,最好切换到更现代,更安全的工具。