C 如果用户输入数字而不是字母,则需要重新编程

C 如果用户输入数字而不是字母,则需要重新编程,c,input,C,Input,我正在尝试制作一个程序,要求用户输入他的名字。如果他给出数字,我希望程序重新编译用户,直到他输入字符作为名称 它应该是这样的: char name[50]; printf("What is your name? "); scanf("%s", name); printf("Hello there, %s\n", name); 在上述情况下,这一切都是好的,但当您输入数字时,它无法识别。如果用户输入数字并且只接受字母,我想重新编译用户 我已经编写了以下代码,但显然不起作用。我非常感谢你的帮助。记

我正在尝试制作一个程序,要求用户输入他的名字。如果他给出数字,我希望程序重新编译用户,直到他输入字符作为名称

它应该是这样的:

char name[50];
printf("What is your name? ");
scanf("%s", name);
printf("Hello there, %s\n", name);
在上述情况下,这一切都是好的,但当您输入数字时,它无法识别。如果用户输入数字并且只接受字母,我想重新编译用户

我已经编写了以下代码,但显然不起作用。我非常感谢你的帮助。记住,简单点

int main()
{
  char name[50];

  int age, agenext, id, idnext = 0;

  //PROMT USER  TO INPUT NAME

  printf("\nPlease enter your name:\n");
  scanf("%s", &name);

      while (isdigit(name))

      {
        printf("wrong input try again");

      }
printf("Your name is %s ",name);
return 0;

考虑使用FGET读取输入。循环检查名称的每个字符,看它是否是数字

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

int main( )
{
    char name[50];
    int valid = 0;
    size_t len = 0;
    size_t each = 0;

    do {
        valid = 1;
        printf ( "Please enter your name\n");
        fgets ( name, sizeof ( name), stdin);//read a line
        name[strcspn ( name, "\n")] = '\0';//optional removal of newline
        len = strlen ( name);
        for ( each = 0; each < len; each++) {//loop through each character
            if ( ( isdigit ( name[each]))) {//found a digit
                valid = 0;
                printf ( "Do not use digits\n");
                break;
            }
        }
    } while ( !valid);
    printf ( "Your name is %s\n", name);
    return 0;
}
#包括
#包括
#包括
#包括
int main()
{
字符名[50];
int valid=0;
尺寸长度=0;
每个尺寸=0;
做{
有效=1;
printf(“请输入您的姓名”);
fgets(name,sizeof(name),stdin);//读一行
name[strcspn(name,“\n”)]='\0';//可选删除换行符
len=strlen(名称);
for(each=0;each
仅稍微修改了您的代码:

int has_digits(char * str)
{
    for (; *str; str++)
    {
        if (isdigit(*str))
        {
            return 1;
        }
    }
    return 0;
}

int main()
{
    char name[50];

    //PROMT USER  TO INPUT NAME

    printf("\nPlease enter your name:\n");
    scanf("%s", name);
    while (has_digits(name))
    {
        printf("wrong input try again\n");
        scanf("%s", name);
    }
    printf("Your name is %s\n", name);
    return 0;
}

欢迎来到StackOverflow!我添加了C标记。如果这不正确,请编辑它。此外,你应该编辑你的问题,明确说明你的问题是什么。您试图将
isdigit
应用于
name
的所有元素是否存在问题?另外,请注意,如果您修复了该条件,您的
while
循环将永远迭代,因为没有机会重新输入
name
而且我应该在C语言的开头,所以解决方案必须很简单:char name[50]。。。printf(“你叫什么名字?”);scanf(“%s”,名称);printf(“你好,%s\n”,name);调用任何
scanf()
函数系列时:1)始终检查返回值(而不是参数值),以确保操作成功。2) 在格式字符串中放置前导空格以使用任何前导空格。3) 使用“%s”格式说明符时,请始终使用小于输入缓冲区长度的“最大长度”修饰符,以避免用户溢出输入缓冲区,从而导致可能导致seg故障事件的未定义行为。注意:由于使用“%s”,因此
scanf()
总是附加NUL字节。为了便于我们人类阅读和理解:1)始终缩进代码。切勿使用制表符缩进,因为每个字处理器/编辑器的制表位/制表符宽度设置都不同。在每个左大括号“{”之后缩进。在每个右大括号“}”之前取消缩进。建议为每一级缩进使用4个空格,因为即使使用可变宽度字体也可以看到,并允许在整个页面中使用多个缩进级别。2) 遵循公理:每行只有一条语句,每条语句(最多)一个变量声明。发布的代码有一个永久循环(while()循环),并且正在检查数组
name[]
的地址,而不是单个字符。非常感谢。你能解释一下为什么我用iisdigit的方式是错误的吗?
isdigit
用于检查单个字符,因此你必须循环检查字符串中的每个字符,并调用函数以查看其中是否有数字。您还应该研究在原始问题下评论的问题,例如scanf的错误检查等。除了换行符之外,还有其他终止输入字符串的方法,因此应该检查是否存在换行符
char newline=strstrstr(name,“\n”)
然后检查
换行符
,查看是否找到换行符
if(newline){newline='\0';}
谢谢,我误以为当
指针
没有找到时它返回了0