如何确保用户输入是唯一的

时间:2015-03-15 21:22:33

标签: c validation input while-loop linked-list

在我的计划中,我想确保'标识符'对于他们正在创建的新Book对象,用户输入的字符串是唯一的。我认为While循环是要走的路,并让它一直要求用户输入一个标识符,直到它与现有标识符不匹配。真的很难找到让它发挥作用的方法,所以如果有人能指出我正确的方向,我真的很感激它。谢谢!

我顺便使用链接列表结构..

void addBook(){
struct node *aNode;
struct book *aBook;
struct node *current, *previous;
bool identifierIsTaken = true;

char identifierInput[10];

current = previous = front;

aBook = (struct book *)malloc(sizeof(struct book));


    while(identifierIsTaken){           
    printf("Enter identifier for new book: ");
    scanf("%s", identifierInput); 

    if(!strcmp(identifierInput, current->element->identifier) == 0){
        identifierIsTaken = false;
        strncpy(aBook->identifier, identifierInput, 10);
    }
    else
        previous = current;
        current = current->next;
    }

    printf("Enter book name: ");
    scanf("%s", &aBook->name);

    printf("Enter author: ");
    scanf("%s", &aBook->author);

..........

当我输入一个被占用的标识符时,循环似乎只工作一次,但是如果我再试一次,它就会掉线并且标识符被带走。

1 个答案:

答案 0 :(得分:3)

最好编写一个单独的函数来检查标识符是否唯一。

int isUnique(char *identifierInput,struct node start)
{
    while(start != NULL) {   
        if(strcmp(identifierInput, start->element->identifier) == 0) {
          //string already present,return 0.
          return 0;
        }
        start = start->link;
    }   
    //we reached end of linked list.string is unique.return 1.
    return 1;
}

从您的主要部分调用此功能,

sudo代码

int main()
{
    :
    :
    :
    while(i<number_of_item){
        printf("Enter identifier for new book: ");
        scanf("%s", identifierInput); 
        if(isUnique(identifierInput,current)){
            //add it to the linked list.do whatever you want here.
        } else {
            // it is not unique.do what ever you want here.
        }
    }
    :
    :
    :
}

希望它会有所帮助。