我编写了小型C ++控制台应用程序,这是源代码:
#include<stdio.h>
#include<locale.h>
#include<ctype.h>
#include<stdlib.h>
void main()
{
setlocale(LC_ALL, "turkish");
int a,b,c,d;
printf("first number: ");
scanf("%d", &a);
printf("second number: ");
scanf("%d", &b);
c = a+b;
printf("Sum: : %d\n", c);
}
正如您所看到的,我正在向用户请求两个号码而不是总结它们。但我想添加一个控件来检查用户enterede的数字是整数吗?
我将检查用户键入的数字,如果数字不是真正的整数,我将回显错误。我在scanf
之后使用它,但效果不好。
if(!isdigit(a))
{
printf("Invalid Char !");
exit(1);
}
很快,在scanf操作中,如果用户键入“a”,它将产生错误消息并且程序停止工作。如果用户键入数字程序将继续
答案 0 :(得分:7)
scanf
为您做验证。只需检查scanf
的返回值。
printf("first number: ");
if(scanf("%d", &a) != 1) {
printf("Bad input\n");
return 1;
}
printf("second number: ");
if(scanf("%d", &b) != 1) {
printf("Bad input\n");
return 1;
}
答案 1 :(得分:2)
C ++的方法是
#include <iostream>
#include <locale>
int main()
{
std::locale::global(std::locale("nl_NL.utf8")); // tr_TR doesn't exist on my system
std::cout << "first number: ";
int a;
if (!(std::cin >> a))
{
std::cerr << "whoops" << std::endl;
return 255;
}
std::cout << "second number: ";
int b;
if (!(std::cin >> b))
{
std::cerr << "whoops" << std::endl;
return 255;
}
int c = a+b;
std::cout << "Sum: " << c << std::endl;
return 0;
}
答案 2 :(得分:1)
isdigit
以char
为参数。
如果对scanf
的调用成功,则可以保证您有一个整数。
scanf
也有一个返回值,表示它已经读取了多少个值。
在这种情况下,您想检查scanf
的返回值是否为1。
请参阅:http://www.cplusplus.com/reference/clibrary/cstdio/scanf/