在我的计划中,我想确保'标识符'对于他们正在创建的新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);
..........
当我输入一个被占用的标识符时,循环似乎只工作一次,但是如果我再试一次,它就会掉线并且标识符被带走。
答案 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.
}
}
:
:
:
}
希望它会有所帮助。