这是一本简单的电话簿

时间:2016-03-10 08:41:25

标签: c filesystems

我在使用该程序时遇到问题 - 这是一本简单的电话簿,您可以在其中输入姓名,号码和邮政编码,但它会给我一些我不太了解的警告。如果有人知道要解决什么,请分享。

#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

1 个答案:

答案 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);
}

请勾选我的答案,我为你工作。