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

C语言。只接受字母表并分开两个问题?,c,alphabet,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("G

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

#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;
}
#包括
内部主(空)
{
char MyFname[20];
字符名称[20];
printf(“输入您的名字和姓氏:\n”);
scanf(“%s%s”,MyFname,MyLname);
printf(“再见%s%s,祝你有美好的一天!”,MyFname,MyName);
返回0;
}
编辑以纳入@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;
}
#包括
int main(){
字符字母字符串[80],数字字符串[80];
scanf(“%79[a-zA-Z]%79[0-9]”,字母字符串,数字字符串);
返回0;
}
问两个独立的问题,呃,问两个独立的问题

#包括
int main(){
char-ans1[80],ans2[80];
printf(“问题1的输入答案:”);
fflush(空);
scanf(“%79[a-zA-Z]”,ans1);
printf(“问题2的输入答案:”);
fflush(空);
scanf(“%79[a-zA-Z]”,ans2);
返回0;
}
编辑以纳入@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;
}
#包括
int main(){
字符字母字符串[80],数字字符串[80];
scanf(“%79[a-zA-Z]%79[0-9]”,字母字符串,数字字符串);
返回0;
}
问两个独立的问题,呃,问两个独立的问题

#包括
int main(){
char-ans1[80],ans2[80];
printf(“问题1的输入答案:”);
fflush(空);
scanf(“%79[a-zA-Z]”,ans1);
printf(“问题2的输入答案:”);
fflush(空);
scanf(“%79[a-zA-Z]”,ans2);
返回0;
}
#包括
#包括
int main()
{
字符buff[1024];
char MyFname[20];
字符名称[20];
如果(fgets(buff,sizeof buff,stdin)!=NULL)
{
如果(sscanf(buff,“%[a-zA-Z]][a-zA-Z]”,MyFname,MyLname)!=2)
{
fprintf(stderr,“无效输入”);
退出(退出失败);
}
}
printf(“再见%s祝您有美好的一天!\n再见%s祝您有美好的一天!”,MyFname,
我的名字);
返回0;
}
输入您的姓名:

约翰·史密斯

再见,约翰,祝你度过愉快的一天

再见,史密斯,祝你度过愉快的一天

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

输入名字和姓氏时,不要忘记留下空格,即John smith

\include
#包括
int main()
{
字符buff[1024];
char MyFname[20];
字符名称[20];
如果(fgets(buff,sizeof buff,stdin)!=NULL)
{
如果(sscanf(buff,“%[a-zA-Z]][a-zA-Z]”,MyFname,MyLname)!=2)
{
fprintf(stderr,“无效输入”);
退出(退出失败);
}
}
printf(“再见%s祝您有美好的一天!\n再见%s祝您有美好的一天!”,MyFname,
我的名字);
返回0;
}
输入您的姓名:

约翰·史密斯

再见,约翰,祝你度过愉快的一天

再见,史密斯,祝你度过愉快的一天

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


不要忘记在输入第一个和最后一个名字时留下空格,即约翰·史密斯< /p>注释:考虑使用一个宽度到<代码> %s>代码>或<代码> %[<代码> >以防止过度运行。<代码> SCANF(“%19s%19s”,MyFname,MyLname)< /代码>。注意:使用宽度到<代码> %s>代码>或<代码> %[< /代码>以防止过度运行。<代码> SCANF(“%19s%19s”)。,MyFname,MyLname)。您的脚本上似乎有错误。有关ans1和ans2未声明的错误。我如何解决此问题?我已编辑以显示声明。Nit:C程序通常不称为“脚本”,因为您必须在运行前将其编译为可执行文件。“您的代码”更正确。您的脚本上似乎有错误。有关ans1和ans2未声明的错误。如何修复?我已编辑以显示声明。Nit:C程序通常不称为“脚本”,因为您必须在运行之前将其编译为可执行文件。“您的代码”将更正确。
#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;

}