C语言。只接受字母表并分开两个问题?

时间:2013-09-17 03:44:54

标签: c alphabet

我希望程序分别回答姓和名,同时严格接受字母输入。我在哪里可以找到更多关于那个的信息?谢谢。

#include <stdio.h>

int main(void)
{
      char MyFname[20];
      char MyLname[20];
      printf("Enter your first and last names: \n");
      scanf(" %s %s", MyFname, MyLname);
      printf("Goodbye %s %s, have a great day!", MyFname, MyLname);
      return 0;
}

2 个答案:

答案 0 :(得分:1)

编辑合并@ chux的建议。

您可以在转换规范字符串中使用字符类。

#include <stdio.h>
int main() {
    char alphabetic_string[80], numeric_string[80];

    scanf(" %79[a-zA-Z] %79[0-9]", alphabetic_string, numeric_string);

    return 0;
}

要问两个单独的问题,呃,提出两个不同的问题!

#include <stdio.h>
int main() {
    char ans1[80], ans2[80];

    printf("Input answer to question 1: ");
    fflush(NULL);
    scanf(" %79[a-zA-Z]", ans1);
    printf("Input answer to question 2: ");
    fflush(NULL);
    scanf(" %79[a-zA-Z]", ans2);

    return 0;
}

答案 1 :(得分:0)

#include<stdio.h>
#include<stdlib.h>

int main()
{
  char buff[1024];
  char MyFname[20];
  char MyLname[20];

  if ( fgets ( buff, sizeof buff, stdin ) != NULL )
  {
    if ( sscanf ( buff, "%[a-zA-Z] %[a-zA-Z]", MyFname, MyLname ) != 2 ) 
    {
      fprintf ( stderr, "Invalid input\n" );
      exit ( EXIT_FAILURE );
    }
  }

  printf ( "Goodbye %s have a great day!\nGoodbye %s have a great day!", MyFname, 
  MyLname );

  return 0;

}

输入您的名字和姓氏:

约翰史密斯

再见约翰度过了美好的一天!

再见史密斯度过了美好的一天!

最好使用fgets获取输入,然后使用sscanf进行验证。如果输入的格式正确,sscanf将成功返回读取的输入总数。

输入名字和姓氏时不要忘记留空间,即约翰史密斯