gpt4 book ai didi

c - 如何将输入格式化为仅接受整数值

转载 作者:行者123 更新时间:2023-11-30 19:50:27 25 4
gpt4 key购买 nike

输入值123——该值是整数,且有效

输入值 1b23a -- 该值无效

如何检测哪些值有效,哪些值无效?

这是我的代码:

#include <stdio.h>
#include <conio.h>
void main()
{
char str1[5],str2[5];
int num,num1,i;
num=0;
clrscr();
printf("Enter the Number ");
scanf("%s",str1);
for(i=0;str1[i]!='\0';i++)
{
if(str1[i]>=48&&str1[i]<=56)
num=num1*10+(str[i]-48);
else
{
printf("The value is invalid ");
}
}
printf("This Number is %d",num);
getch();
}

最佳答案

请参阅this answer regarding use of strtol() 。这是一种安全的方法来转换任意输入,应该是整数的字符串表示形式,同时还可以保存“垃圾”字节以进行额外分析。

使用它,您的代码将如下所示:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#ifdef LINUX_VERSION
#include <curses.h>
#else
#include <conio.h>
#endif

#define BUFF_SIZE 1024

int main(void)
{
char str1[BUFF_SIZE], *garbage = NULL;
long num = 0;

printf("Enter the Number ");
scanf("%s",str1);

errno = 0;

num = strtol(str1, &garbage, 0);
if (errno) {
printf("The number is invalid\n");
return 1;
}

printf("You entered the number %ld\n", num);
if (garbage != NULL) {
printf("Additional garbage that was ignored is '%s'\n", garbage);
}
getch();
return 0;
}

这并不能解决您所发布内容的所有问题,但它应该可以帮助您有一个更好的开始。

输出是:

tpost@tpost-desktop:~$ ./t 
Enter the Number 1234abdc
You entered the number 1234
Additional garbage that was ignored is 'abdc'

编译通过:

gcc -Wall -DLINUX_VERSION -o t t.c -lcurses

我不确定您使用的什么平台,因此可能需要对代码进行其他修复。

关于c - 如何将输入格式化为仅接受整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2735269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com