カンマで区切られたユーザーから名前を取得するプログラムを作成しています。このプログラムを使用すると、ユーザーはコンマの間に必要な数のスペースを入れることができます。したがって、たとえば:
私が次のようなものを入力する場合
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を適切に使用していないためですか?