将char发送到C中的链表

时间:2015-10-29 20:56:20

标签: c pointers linked-list char

非常感谢现在程序运行正常。 我仍然想了解一些事情,我得到2个警告:

| 36 |警告:内置函数'strcspn'的不兼容隐式声明[默认启用] |

| 55 |警告:内置函数'strcpy'的不兼容隐式声明[默认启用] |

typedef struct a nodo;
struct a
{
    int cant;
    char cad[30];
    nodo * sig;
};


void insertar (nodo**,nodo *);
void mostrarlista (nodo *);
void borrarlista(nodo**);
nodo * nuevonodo(void);


int main (void)
{
nodo *pi=NULL,*q,datos;
q=NULL;
char cad[30];
int cod,N=4,digito,j;

    printf("Ingrese Codigo Postal, 0 para finalizar:");
    gets(cad);
    fflush(stdin);

        while ((cad!=NULL))
        {
            cad[strcspn(cad,"\n")] = '\0';
            if (strcmp(cad, "0") == 0)
            {
                break;
            }
            digito=1;
            j=0;
            for (j = 0; j<N; j++)
            {
                if (!isdigit((unsigned char) cad[j]))
                {
                    digito = 0;
                    break;
                }
            }
            if (digito && cad[N] == '\0')
            {
                //cod=atoi(cad);//Esto me come los 0?
                q=nuevonodo();
                strcpy(q->cad, cad);
                q->cant=1;
                insertar(&pi,q);
                printf("Ingrese Siguiente Codigo Postal, 0 para finalizar:");
                gets(cad);
                fflush(stdin);
            }
                else
                {
                    printf("Codigo Postal Incorrecto\n");
                    printf("Ingrese Codigo Postal, 0 para finalizar:");
                    gets(cad);
                    fflush(stdin);
                }
        }
        system("cls");
        mostrarlista(pi);
        borrarlista(&pi);

        getch();
        return 0;
}

1 个答案:

答案 0 :(得分:0)

应用评论后,清理代码,删除重复的代码,这就是结果。

它干净利落地编译,但尚未经过测试。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define N (4)

typedef struct a nodo;
struct a
{
    int cant;
    char cad[30];
    nodo * sig;
};


void insertar (nodo**,nodo *);
void mostrarlista (nodo *);
void borrarlista(nodo**);
nodo * nuevonodo(void);


int main (void)
{
    nodo *pi = NULL;
    nodo *q  = NULL;
    //nodo datos;

    char cad[30];
    //int  cod;
    int  digito;
    int  j;

    printf("Ingrese Codigo Postal, 0 para finalizar:");



    while ( fgets(cad, sizeof(cad), stdin) )
    {
        // eliminate trailing newline
        cad[strcspn(cad,"\n")] = '\0';

        // if '0' is first digit entered, exit while loop
        if ( '0' ==  cad[0] )
        { // then user wants to quit entering data
            break;
        }


        // verify contents of cad[] as 4 digits
        digito=1;

        for (j = 0; j<N; j++)
        {
            if (!isdigit((unsigned char) cad[j]))
            {
                digito = 0;
                //break; a user input error is not a reason to quit program
            }
        }

        if (digito && (cad[N] == '\0') )
        { // then valid 4 digit input
            //cod=atoi(cad);//Esto me come los 0?
            // allocate struct
            q=nuevonodo();
            // fill in fields in struct
            strcpy(q->cad, cad);
            q->cant=1;
            // insert struct into linked list
            insertar(&pi,q);

            printf("Ingrese Siguiente Codigo Postal, 0 para finalizar:");
        }

        else
        { // else invalid input, report problem to user
            printf("Codigo Postal Incorrecto\n");
            printf("Ingrese Codigo Postal, 0 para finalizar:");
        } // end if
    } // end while

    system("cls");
    mostrarlista(pi);
    borrarlista(&pi);

    // wait for user to enter any char before exiting program
    while( EOF != getchar());
    getchar();
    return 0;
} // end function: main