c 未定义标识符strcmp scanf("%s %s %f", Isbn, Name, &Price);
时间: 2023-11-19 09:51:18 浏览: 51
这个错误提示表明您的代码中使用了未定义的标识符 `strcmp`,这通常是因为您没有包含 `<string.h>` 头文件。`strcmp` 是一个字符串比较函数,需要该头文件才能使用。
另外,您提到的 `scanf` 函数也需要注意,如果输入的字符串中包含空格,那么只会读取第一个字符串,后面的字符串和浮点数都无法读取。可以考虑使用 `fgets` 函数来读取一整行字符串,然后再使用 `sscanf` 函数来解析其中的数据。
相关问题
这段代码有错误吗void buy()//浏览全部菜单并点餐 { FILE *fp; int num,i=0; float s=0.0; if((fp=fopen("C:\\Users\\86159\\Desktop\\菜单.txt","a+"))==NULL) { printf("文件打开失败"); exit(0); }//打开文件 while(!feof(fp)) { fscanf(fp,"\t%s\t%f\n",p->name,&p->Price); printf("名称:%s",p->name); printf("\n价格为:%f\n",p->Price); } printf("您要点几道菜:"); scanf("%d",&num); for(i=0;i<num;i++) { printf("请输入第%d道菜名:",i+1); scanf("%s",na[i].name); } i=0; while(!feof(fp)) { fscanf(fp,"\t%s\t%f\n",p->name,&p->Price); if(strcmp(p->name,na[i].name)==0&&i<num) { s+=p->Price;i++; } } printf("您需付款%f元\n",s); fclose(fp); }
有一些错误。
首先,在 `void buy()` 函数中,没有定义结构体 `p` 和 `na`。应该先定义它们,例如:
```
struct dish {
char name[20];
float Price;
};
struct dish menu[100]; // 定义一个菜单数组
struct order {
char name[20];
};
struct order na[100]; // 定义一个点餐数组
```
然后,在 `while(!feof(fp))` 循环中,没有给 `p` 赋值。应该使用循环变量 `i` 来遍历菜单数组 `menu`,例如:
```
while(!feof(fp))
{
fscanf(fp, "\t%s\t%f\n", menu[i].name, &menu[i].Price);
printf("名称:%s", menu[i].name);
printf("\n价格为:%f\n", menu[i].Price);
i++; // 遍历菜单数组
}
```
接着,在 `while(!feof(fp))` 循环后面,应该把文件指针重新定位到文件开头,以便后面再次遍历菜单数组。可以使用 `rewind(fp)` 函数来实现,例如:
```
rewind(fp); // 把文件指针重新定位到文件开头
```
最后,在第二个 `while(!feof(fp))` 循环中,如果已经读取到文件末尾,就不能再次读取文件了。应该用 `i < num && !feof(fp)` 来判断循环的结束条件,例如:
```
while(i < num && !feof(fp))
{
fscanf(fp, "\t%s\t%f\n", menu[i].name, &menu[i].Price);
if(strcmp(menu[i].name, na[i].name) == 0)
{
s += menu[i].Price;
i++;
}
}
```
此外,还有一些细节问题,例如:
- 在 `fopen` 函数中,应该使用双反斜杠(`\\`)来表示路径分隔符;
- 在 `scanf` 函数中,应该使用 `%f` 来读取浮点数;
- 在 `printf` 函数中,应该在字符串后面加上 `\n`,以便换行。
下面是修改后的代码:
```
void buy() // 浏览全部菜单并点餐
{
FILE *fp;
int num, i = 0;
float s = 0.0;
if((fp = fopen("C:\\Users\\86159\\Desktop\\菜单.txt", "a+")) == NULL)
{
printf("文件打开失败");
exit(0);
}
// 遍历菜单数组并输出
while(!feof(fp))
{
fscanf(fp, "\t%s\t%f\n", menu[i].name, &menu[i].Price);
printf("名称:%s\n", menu[i].name);
printf("价格为:%f\n\n", menu[i].Price);
i++;
}
rewind(fp); // 把文件指针重新定位到文件开头
printf("您要点几道菜:");
scanf("%d", &num);
for(i = 0; i < num; i++)
{
printf("请输入第%d道菜名:", i + 1);
scanf("%s", na[i].name);
}
i = 0;
// 遍历菜单数组并计算总价
while(i < num && !feof(fp))
{
fscanf(fp, "\t%s\t%f\n", menu[i].name, &menu[i].Price);
if(strcmp(menu[i].name, na[i].name) == 0)
{
s += menu[i].Price;
i++;
}
}
printf("您需付款%f元\n", s);
fclose(fp);
}
```
void revise(book*h)//修改 { book*p = h->next; printf("请输入你要修改的书名:"); char abc[20]; scanf("%s",&abc,p->date.name); for(int i=0;i<101;i++) { if(p->date.ISBN==NULL) break; if(strcmp(p->date.name,abc)==0) { printf("原图书编号为:%s\n",p->date.ISBN); printf("原书名为%s\n",p->date.name); printf("请输入新书名:\n"); scanf("%s",&p->date.name); printf("原作者名为:%s\n",p->date.writer); printf("请输入新作者:\n"); scanf("%s",&p->date.writer); printf("原出版社为:%s\n",p->date.ad); printf("请输入新出版社:\n"); scanf("%s",&p->date.ad); printf("原价格为:%s\n",p->date.price); printf("请输入新价格:\n"); scanf("%s",&p->date.price); system("pause"); break; } }
这段代码实现了图书馆系统中的修改图书信息功能,用户输入要修改的书名,程序会遍历整个链表查找是否存在该书名对应的书籍,如果存在,则输出该书籍的原信息,并让用户输入新的书名、作者、出版社和价格。最后程序会暂停等待用户按下任意键继续执行。不过,这段代码存在一些问题,例如可能会导致内存泄漏、输入缓冲区溢出等问题。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)