Я делаю программу, которая берет имена от пользователя, разделенных запятыми. Программа позволяет пользователю ставить столько, сколько они хотят, между запятыми. Так, например:
Если бы я набрал что-то вроде
Smith, John
или
Smith,John
Я бы хотел распечатать
John, Smith
Дело в том, что моя программа неправильно обрабатывает приведенные выше примеры; это работает, если ввод был что-то вроде
Smith , John
или
Smith ,John.
Вот мой код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LINESIZE 128
int get_last_first(FILE *fp);
int main (void)
{
get_last_first(stdin);
}
/*takes names in the format [LASTNAME],[FIRSTNAME]*/
int get_last_first(FILE *fp)
{
char first[LINESIZE];
char last[LINESIZE];
char line[LINESIZE];
size_t i;
while(1)
{
printf("Enter your last name followed by a comma and your first name\n");
/*if we cant read a line from stdin*/
if(!fgets(line, LINESIZE, fp))
{
clearerr(stdin);
break; /*stop the loop*/
}
/*goes through the line array and checks for non-alphabetic characters*/
for(i = 0; i < strlen(line); i++)
{
if(!isalpha(line[i]))
{
/*if it sees a space hyphen or comma, it continues the program*/
if((isspace(line[i]) || line[i] == ',') || line[i] == '-' )
{
continue;
}
else
{
return -1;
}
}
}
if(sscanf(line, "%s , %s", last, first))
{
printf("%s, %s", first, last);
return 1;
}
return 0;
}
}
Это потому, что я не использую sscanf должным образом?