int n;
int c;
printf("Please enter an integer: ");
while (scanf("%d", &n) != 1) {
while (!isspace(c = getchar()));
ungetc(c, stdin);
printf("You must enter a valid number. Try again.\n");
continue;
}
int main(void)
{
char* end;
char number_temp[256];
int number;
while(1)
{
puts("Give a number");
scanf("%s",number_temp);
number = strtol(number_temp, &end, 10);
if (end) //If there is an error the value of *end will be non zero
printf("try again");
else
break;
}
return 0;
}
6条答案
按热度按时间8xiog9wr1#
使用
fgets()
,然后使用sscanf()
或strtol()
。使用
strtol()
而不是sscanf()
添加+/-溢出保护,因为设置errno
。请参阅Read_long()作为如何使用此函数的示例。
vqlkdk9b2#
scanf
的传回值是成功扫描的参数数目。ivqmmu1c3#
怎么样:
rjee0c154#
初学者可以使用stdio.h,这对于家庭作业来说是相当不错的,只要你不期望任何花哨的东西,比如密码字段输入、输入编辑功能、键入时的格式化、功能键和控制键处理等。你对错误输入所能做的仅限于基本操作。
如果你需要用C语言编写一个专业的应用程序,这是我们在70年代和80年代经常做的事情,在C语言中,你必须避免stdio. h,因此输入时必须使用scanf。你必须检查你的操作环境和社区提供了什么。Curses,或者ncurses可能会帮助你解决这个问题。在MS-DOS中,我们习惯于捕捉中断,以便对键盘有绝对的控制权。在Unix中,我们使用Bill Joy's termcap或一个terminfo库,这些库允许你控制你的终端和键盘。
请记住,创建一个清晰的基于文本的用户界面并不是一件小事,完全控制用户的输入也不是一件容易的事情。幸运的是,这也不再是一个问题了,因为Java和Swing已经出现了...
7qhs6swi5#
基本技术是检测问题(从
*scanf()
意外返回值),然后读取行的其余部分(将字符快速插入换行符或EOF),然后继续。或者,通常更好的方法(尤其是因为错误报告可以报告整个行)是使用
fgets()
或getline()
读取整个行,然后使用sscanf()
或其他技术解析该行,并从那里开始。px9o7tmv6#
您可以将用户的输入作为字符串读取,然后使用
strtol()
将其转换为整数。