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