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