我在使用该程序时遇到问题 - 这是一本简单的电话簿,您可以在其中输入姓名,号码和邮政编码,但它会给我一些我不太了解的警告。如果有人知道要解决什么,请分享。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int menu(void);
void enter(void);
void searchPhoneNumber(void);
void searchZipCode(void);
void load(void);
void save(void);
static int glb;
static char names[100][100];
static int numbers[100][20];
static int zipCodes[100][4];
int menu(void){
do{
printf("---- PHONE BOOK ----\n");
printf("1. Enter\n");
printf("2. Search by a phone number\n");
printf("3. Search by a zip code\n");
printf("4. Save on the disk\n");
printf("5. Quit\n");
printf("Enter your selection: \n");
scanf("%d", &glb);
}while(glb<1 || glb > 5);
return glb;
}
int main(){
int choice = menu();
do{
switch(choice){
case 1: enter();
break;
case 2: searchPhoneNumber();
break;
case 3: searchZipCode();
break;
case 4: save();
break;
}
}while(choice!=5);
return 0;
}
void load(void){
FILE *fp;
if(fp=fopen("phone-book", "Rb")==NULL){
printf("Error reading file.\n");
exit(1);
}
for(glb = 0;glb<100;glb++){
if(fread(names, sizeof names, 1, fp)!=1){
printf("Error reading files.\n");
exit(1);
}
if(fread(numbers, sizeof numbers, 1, fp)!=1){
printf("Error reading files.\n");
exit(1);
}
if(fread(zipCodes, sizeof zipCodes, 1, fp)!=1){
printf("Error reading files.\n");
exit(1);
}
}
fclose(fp);
}
void enter(void){
int i = 0;
for(;glb<100;glb++){
if(glb<100){
printf("Enter name: \n");
gets(names[i]);
}
}
}
void searchPhoneNumber(void){
int i=0;
int enteredNumber[10];
for(glb=0;glb<100;glb++){
printf("Enter to search by phone number: \n");
gets(enteredNumber[i]);
if(!strcmp(enteredNumber, numbers)){
printf("%c %c", enteredNumber[i], numbers);
}
}
}
void searchZipCode(void){
int i = 0;
int enteredZipCode[4];
for(glb=0;glb<100;glb++){
printf("Enter to search by zip code: (4 digits)\n");
scanf("%d", &enteredZipCode[i]);
if(enteredZipCode!=zipCodes){
printf("%d %d", enteredZipCode[i], zipCodes);
}
}
}
void save(void){
FILE *fp;
if(fp=fopen("phone-book", "wb")==NULL){
printf("Cannot write file.\n");
exit(1);
}
for(glb=0;glb<100;glb++){
if(fwrite(names, sizeof names, 1, fp)!=1){
printf("Error saving file.\n");
exit(1);
}
if(fwrite(numbers, sizeof numbers, 1, fp)!=1){
printf("Error saving file.\n");
exit(1);
}
if(fwrite(zipCodes, sizeof zipCodes, 1, fp)!=1){
printf("Error saving file.\n");
exit(1);
}
}
fclose(fp);
}
警告
/main.c:50:10: Incompatible integer to pointer conversion assigning to 'FILE *' (aka 'struct __sFILE *') from 'int'
/main.c:50:10: Using the result of an assignment as a condition without parentheses
/main.c:87:14: Incompatible integer to pointer conversion passing 'int' to parameter of type 'char *'
/main.c:88:20: Incompatible pointer types passing 'int [10]' to parameter of type 'const char *'
/main.c:88:35: Incompatible pointer types passing 'int [100][20]' to parameter of type 'const char *'
/main.c:89:47: Format specifies type 'int' but the argument has type 'int (*)[20]'
/main.c:100:26: Array comparison always evaluates to true
/main.c:100:26: Comparison of distinct pointer types ('int *' and 'int (*)[4]')
/main.c:101:48: Format specifies type 'int' but the argument has type 'int (*)[4]'
/main.c:108:10: Incompatible integer to pointer conversion assigning to 'FILE *' (aka 'struct __sFILE *') from 'int'
/main.c:108:10: Using the result of an assignment as a condition without parentheses
答案 0 :(得分:0)
Bug fix:
1.correct form to read:if((fp=fopen("phone-book", "wb"))==NULL)
2.In function void searchPhoneNumber(void) , you tried to read an int array by gets(),a fatal error.
you used strcmp(), between int array and char array , fatal error
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
int menu(void);
void enter(void);
void searchPhoneNumber(void);
void searchZipCode(void);
void load(void);
void save(void);
static int glb;
static char names[100][100];
static int numbers[100][20];
static int zipCodes[100][4];
int menu(void)
{
do
{
printf("---- PHONE BOOK ----\n");
printf("1. Enter\n");
printf("2. Search by a phone number\n");
printf("3. Search by a zip code\n");
printf("4. Save on the disk\n");
printf("5. Quit\n");
printf("Enter your selection: \n");
scanf("%d", &glb);
}
while(glb<1 || glb > 5);
return glb;
}
int main()
{
int choice = menu();
do
{
switch(choice)
{
case 1:
enter();
break;
case 2:
searchPhoneNumber();
break;
case 3:
searchZipCode();
break;
case 4:
save();
break;
}
}
while(choice!=5);
return 0;
}
void load(void)
{
FILE *fp;
if((fp=fopen("phone-book", "r"))==NULL)
{
printf("Error reading file.\n");
exit(1);
}
for(glb = 0; glb<100; glb++)
{
if(fread(names, sizeof names, 1, fp)!=1)
{
printf("Error reading files.\n");
exit(1);
}
if(fread(numbers, sizeof numbers, 1, fp)!=1)
{
printf("Error reading files.\n");
exit(1);
}
if(fread(zipCodes, sizeof zipCodes, 1, fp)!=1)
{
printf("Error reading files.\n");
exit(1);
}
}
fclose(fp);
}
void enter(void)
{
int i = 0;
for(; glb<100; glb++)
{
if(glb<100)
{
printf("Enter name: \n");
gets(names[i]);
}
}
}
void searchPhoneNumber(void)
{ `Completely wrong use of gets() and strcmp()`
/*
int i=0;
int enteredNumber[10];
for(glb=0; glb<100; glb++)
{
printf("Enter to search by phone number: \n");
gets(enteredNumber);///error: you can not use gets on int array
if(!strcmp(enteredNumber, numbers))///error: you can not use strcmp() between int array and char array
{
printf("%c %c", enteredNumber[i], numbers);
}
}*/
}
void searchZipCode(void)
{
int i = 0;
int enteredZipCode[4];
for(glb=0; glb<100; glb++)
{
printf("Enter to search by zip code: (4 digits)\n");
scanf("%d", &enteredZipCode[i]);
if(enteredZipCode!=zipCodes[glb])///previous:error, zipCodes is an array.
{
printf("%d %d", enteredZipCode[i], zipCodes[glb]);
}
}
}
void save(void)
{
FILE *fp;
if((fp=fopen("phone-book", "wb"))==NULL)
{
printf("Cannot write file.\n");
exit(1);
}
for(glb=0; glb<100; glb++)
{
if(fwrite(names, sizeof names, 1, fp)!=1)
{
printf("Error saving file.\n");
exit(1);
}
if(fwrite(numbers, sizeof numbers, 1, fp)!=1)
{
printf("Error saving file.\n");
exit(1);
}
if(fwrite(zipCodes, sizeof zipCodes, 1, fp)!=1)
{
printf("Error saving file.\n");
exit(1);
}
}
fclose(fp);
}
请勾选我的答案,我为你工作。