#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct record
{
char name[20];
char surname[20];
char telephone[20];
}Record;
typedef struct node
{
Record data;
struct node *next;
}Node;
Node *head = NULL;
void addRecord(Record s)
{
Node *newNode;
Node *n;
newNode = (Node*)malloc(sizeof(Node));
newNode->data = s;
newNode->next = NULL;
if (head == NULL)
{
// The linked list is empty
head = newNode;
}
else
{
// Traverse the whole list until we arrive at the last node
n = head;
while (n->next != NULL)
{
n = n->next;
}
n->next = newNode;
}
}
Record enterRecordDetails()
{
Record aRecord;
int len;
int valid = 0;
int valid2 = 0;
printf("ENTER THE FOLLOWING RECORD DETAILS:\n");
printf(" NAME : ");
gets(aRecord.name);
printf(" SURNAME : ");
gets(aRecord.surname);
do {
valid = 0;
valid2 = 0;
printf(" TELEPHONE NO. (8 digits): ");
gets(aRecord.telephone);
len = strlen(aRecord.telephone);
for (int i = 0; i < len; i++)
{
if (!isdigit(aRecord.telephone[i])) {
printf("You enterred an invalid number\n");
valid = 1; break;
}
}
Node *p = head;
while (p != NULL)
{
Node *next = p->next;
for (; next; p = next, next = next->next) {
if (strcmp(p->data.telephone, aRecord.telephone) == 0)
{
valid2 = 1; break;
}
}
if(p = NULL)break;
}
} while((valid == 1) || (len != 8) || (valid2 == 1));
getchar();
fflush(stdin);
return aRecord;
}
int main(void)
{
char menuOption;
do
{
system("cls");
printf("~~~ MAIN MENU ~~~\n");
printf("1. Add Telephone Record\n");
printf("2. Delete Telephone Record\n");
printf("3. Search\n");
printf("4. Display All Records\n");
printf("5. Exit\n\n");
menuOption = getchar();
fflush(stdin);
switch (menuOption)
{
case '1':
addRecordToList();
break;
case '4':
displayList();
break;
}
} while (menuOption != '5');
getchar();
return 0;
}C: gets() überspringt den ersten Eingang
Wenn ein Schüler das Hinzufügen der Computer den Benutzer auffordert, den Namen nicht den Namen einzugeben. Warum überspringt das Programm 'Name'? "Name" wird angezeigt, es wird jedoch erwartet, dass der Benutzer stattdessen den Nachnamen schreibt.
Sie nur einen Teil Ihres Programms gebucht hat. Das ist nicht sehr hilfreich, um das Problem zu diagnostizieren. Bitte veröffentlichen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). –
Sie sollten 'gets' nicht verwenden: http://stackoverflow.com/questions/1694036/why-is-the-gets-function-so- dangerous-that-it-hould-not-be-used. –
Das Problem ist die Interaktion von 'gets()' mit vorherigem, nicht hochgeladenem Code. – chux