我想解析一个整数,但我的下面的代码也接受像"3b"这样的字符串,它以数字开头,但附加了字符.我如何拒绝这样的字符串?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n;
if(argc==2 && sscanf(argv[1], "%d", &n)==1 && n>0){
f(n);
return 0;
}
else{
exit(EXIT_FAILURE);
}
}
Run Code Online (Sandbox Code Playgroud) 如何使用scanf验证用户输入.现在我有类似的东西,但不起作用.
注意:我有atoi只是为了验证scanf验证是否有效.
scanf("%[0987654321.-]s",buf);
i = atoi(buf);
if(i)
index = i;
Run Code Online (Sandbox Code Playgroud) 我正在读取一个整数,scanf同时scanf用格式检查读取的数字位数%n,第一个输出始终是正确的,但之后输出增加了一个.这是第二次scanf读取的最后一次."\n"scanf
我知道这种有问题的scanf和char那就是scanf("%c",&cval)--->以scanf(" %c",&cval)留下一些小的空间,以避免scanf函数读取行的末尾.但整数是什么?
我已经在这里看到了一些问题链接在这里他们似乎都认为scanf()是"retarted"和fget()应该总是被使用..是真的如此,在项目中避免它是否好?我的意思是消除所有这些错误,有没有办法防止这种情况.我必须使用fget()这个或有没有办法解决这个问题scanf().欢迎所有评论,感谢您的时间.我只是想知道是否有办法解决它,我知道如何使用%n.
#include <stdio.h>
int main(void) {
int i =0 ,byte_count = 0,val;
printf("Enter a number: ");
scanf("%d%n",&val,&byte_count);
while (i < 3){
printf("byte count is: %d\n",byte_count);
scanf("%d%n",&val,&byte_count);
i++;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)