C+上的整数验证+; 我编写的小型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); }
很快,在scanf操作中,如果用户键入“a”,它将生成一条错误消息,程序将停止工作。如果用户键入一个数字,程序将继续进行验证。只需检查C+上的整数验证+; 我编写的小型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); },c,integer,C,Integer,很快,在scanf操作中,如果用户键入“a”,它将生成一条错误消息,程序将停止工作。如果用户键入一个数字,程序将继续进行验证。只需检查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 i
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;
}
isdigit
将char
作为参数
如果对scanf
的调用成功,则保证您有一个整数
scanf
还有一个返回值,指示它读取了多少值
在这种情况下,您需要检查scanf
的返回值是否为1
<>: < P>此方式的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;
}
#包括
#包括
int main()
{
std::locale::global(std::locale(“nl_nl.utf8”);//tr_tr在我的系统上不存在
标准:cout>a)
{
STR::我把这个当作C来延迟,因为我没有看到任何关于它的C++,它会帮助你得到更好的答案。我从10分钟前就学习C++,哈哈!我们的教授这样写。我复制了它。@ Eray不是代码>空main <代码>,它从来没有,也永远不会。它是代码> int main < /> >,尽管<代码>返回< /代码>Atices在主< /C> >中是可选的(但这是唯一的非-Cuth.VoUT//Cuffe>函数,它们是可选的)。不幸的是,您的教授从上个世纪开始教你们C++。
对我来说似乎不太可能是区域设置的正确名称,而且您通常不需要使用setlocale
。我不知道您所说的“我无法自定义错误”是什么意思当scanf
失败时,您当然可以打印任何您想要的错误消息,不是吗?是的,我的意思是错误消息,很抱歉输入错误。现在您的答案很好,真的帮助了我。谢谢!但例如,我正在键入“A”对于第一个数字,它跳过要求的第二个数字,而不是直接写入,SUM:-1717986920
这是因为第一个scanf
尝试读取“A”并且失败,返回0。由于缓冲区中仍然有输入,下一个scanf
立即尝试做同样的事情,失败,并返回0
。试试Rob的答案-我想你会明白你这样做时发生了什么。你一定是在开玩笑:我第一次听到这些(`std::locale::global(),cin,cout等等)scanf、printf、setlocale都在ansic的领域中:)我不知道是什么:)我正在从事web开发(PHP)4年来,我从来没有用C,C++做过多少课程?这是错误的广告,据我们所知…C是一种很好的语言,用于某些目的和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;
}