Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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-价格查询程序_C_Loops - Fatal编程技术网

C-价格查询程序

C-价格查询程序,c,loops,C,Loops,我被要求制作一个C程序,作为“价格查找”,用户输入产品名称,程序将打印其名称和存储在文件中的价格。如果文件中没有该项,程序将通知用户。只要用户想搜索,程序就会一直循环。我使用DEV C++进行了编码,但是在我运行代码之后,程序在几次循环之后就被卡住了,而且是随机的。你们能发现我的代码有问题吗?还是只是DEV C++的问题?我在下面包括我的代码。非常感谢你的帮助 #include<stdio.h> #include<stdlib.h> #include<string.

我被要求制作一个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);
}
#包括
#包括
#包括
#包括
#包括
int main()
{
档案*项目;
char*mode=“r”;
char-pName[50];
浮冰;
字符名称[50];
int值=0;
char='Y';
chars[50];
items=fopen(“Product\u Name\u Price.txt”,mode);
if(items==NULL)
{
fprintf(stderr,“无法打开文件Product\u Name\u Price.txt!\n”);
出口(1);
}
printf(“文件已成功打开\n”);
做
{
printf(“输入要查找的产品的名称\n”);
scanf(“%s”、&p1Name);
while(strcmp(p1Name,pName)!=0)
{
fscanf(项目“%s%f”、pName和pPrice);
//printf(“%s\t%.2f\n”,pName,pPrice);
//值=strcmp(p1Name,pName);
if(strcmp(p1Name,pName)==0)
{
printf(“%s\t%.2f\n”,pName,pPrice);
}   
}
/*
其他的
{
printf(“系统中没有数据”);
}  
*/
printf(“您想查找更多项目吗?(Y/N)\N”);
scanf(“%s”,响应(&s));
}while(respond=='Y'| | respond=='Y');
printf(“此程序正在关闭\n”);
fclose(项目);
}

您的程序具有未定义的行为,因为您的
scanf(“%s”,&response)
读入
response
,就好像它是一个数组,对于正在读取的字符串来说大小足够大-该大小至少为2(包括空终止符),但
response
仅为一个字符。你炸毁了你的堆栈和损坏的内存,然后所有的赌注都结束了


你可以写代码> SCANF(“%C”,和响应)< /C>,而不是实际读取一个字符,不过如果你写C++程序,你最好切换到现代的、更安全的工具。

你的程序有不明确的行为,因为你的代码> SCANF(“%s”,和响应)读入

response
,就好像它是一个数组,对于正在读取的字符串来说,它的大小至少是2(包括空终止符),但
response
只是一个字符。你炸毁了你的堆栈和损坏的内存,然后所有的赌注都结束了


<>你可以写代码> SCANF(“%C”,和响应)< /C>,而不是实际读取单个字符,不过如果你写C++程序,你最好切换到现代的、更安全的工具。

SCANF%s是字符串,%c是字符。不确定的行为导致随机的事情。这是C程序还是C++程序?挑一个。(如果是C++程序,为什么要用C语言编写,使用C语言?)我在C程序中做。那么为什么要标注这个问题呢?为什么要用C++ IDE编写它呢?没有意义。我被要求用C语言做这个程序,我用的是我从讲师那里学到的东西,还有一些她没有教我的东西。也许我查看了错误的源,并拾取了一些C++填充。SCANF%s是字符串,%c是字符。不确定的行为导致随机的事情。这是C程序还是C++程序?挑一个。(如果是C++程序,为什么要用C语言编写,使用C语言?)我在C程序中做。那么为什么要标注这个问题呢?为什么要用C++ IDE编写它呢?没有意义。我被要求用C语言做这个程序,我用的是我从讲师那里学到的东西,还有一些她没有教我的东西。也许我查错了来源,然后拿起一些C++的东西。我确实从%s变成%c,忽略了y/n问题的扫描。你知道为什么吗?@safiuddinmarsor:它不会“忽略”任何东西。你可能需要吃光后面的新行。请在提问之前进行一些研究。我确实从%s更改为%c,并且它忽略了y/n问题的扫描。你知道为什么吗?@safiuddinmarsor:它不会“忽略”任何东西。你可能需要吃光后面的新行。在提问之前,请进行一些研究。