C++ Cerr不工作

C++ Cerr不工作,c++,C++,我编写了一个函数,它从命令行获取两个数字并将其相乘,如果argc不是3,则应该输出一个cerr行;但是它不起作用。我做错什么了吗 #include <iostream> #include <cstdlib> using namespace std; int main(int argc, char *argv[]) { int product; int first_num = atoi(argv[1]); int second_num = atoi(argv[2])

我编写了一个函数,它从命令行获取两个数字并将其相乘,如果argc不是3,则应该输出一个cerr行;但是它不起作用。我做错什么了吗

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char *argv[])
{
 int product;
 int first_num = atoi(argv[1]);
 int second_num = atoi(argv[2]);
 product = first_num * second_num;
 if(argc != 3)
 {
    cerr << "Usage: ./multiply first_num second_num" << endl;
    exit(1);
 }
 else
 {
    cout << product << endl;
 }
}
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
int产品;
int first_num=atoi(argv[1]);
int second_num=atoi(argv[2]);
产品=第一个数量*第二个数量;
如果(argc!=3)
{

cerr如果您没有向程序传递任何参数,
argv[1]
是一个空指针,
argv[2]
不存在,则不允许您访问该索引。因此您不想尝试将其传递给atoi()。请先检查,然后查看
argv[1]
/
argv[2]中的内容
仅当您确定它们确实存在时

 if(argc != 3)
 {
    cerr << "Usage: ./multiply first_num second_num" << endl;
    exit(1);
 }
 else
 {
    int product;
    int first_num = atoi(argv[1]);
    int second_num = atoi(argv[2]);
    product = first_num * second_num;
    cout << product << endl;
 }
if(argc!=3)
{

cerr如果您没有向程序传递任何参数,
argv[1]
是一个空指针,
argv[2]
不存在,则不允许您访问该索引。因此您不想尝试将其传递给atoi()。请先检查,然后查看
argv[1]
/
argv[2]中的内容
仅当您确定它们确实存在时

 if(argc != 3)
 {
    cerr << "Usage: ./multiply first_num second_num" << endl;
    exit(1);
 }
 else
 {
    int product;
    int first_num = atoi(argv[1]);
    int second_num = atoi(argv[2]);
    product = first_num * second_num;
    cout << product << endl;
 }
if(argc!=3)
{

cerr如果您没有向程序传递任何参数,
argv[1]
是一个空指针,
argv[2]
不存在,则不允许您访问该索引。因此您不想尝试将其传递给atoi()。请先检查,然后查看
argv[1]
/
argv[2]中的内容
仅当您确定它们确实存在时

 if(argc != 3)
 {
    cerr << "Usage: ./multiply first_num second_num" << endl;
    exit(1);
 }
 else
 {
    int product;
    int first_num = atoi(argv[1]);
    int second_num = atoi(argv[2]);
    product = first_num * second_num;
    cout << product << endl;
 }
if(argc!=3)
{

cerr如果您没有向程序传递任何参数,
argv[1]
是一个空指针,
argv[2]
不存在,则不允许您访问该索引。因此您不想尝试将其传递给atoi()。请先检查,然后查看
argv[1]
/
argv[2]中的内容
仅当您确定它们确实存在时

 if(argc != 3)
 {
    cerr << "Usage: ./multiply first_num second_num" << endl;
    exit(1);
 }
 else
 {
    int product;
    int first_num = atoi(argv[1]);
    int second_num = atoi(argv[2]);
    product = first_num * second_num;
    cout << product << endl;
 }
if(argc!=3)
{



cerr索引开始于0@marsh:
argv[0]
是程序名。在调用atoi之前,需要将检查argc的if语句移动到。@jwodder啊!很高兴知道。谢谢。那么我是否在if函数中先输入int,然后再输入int second?索引从开始0@marsh:
argv[0]
是程序名。在调用atoi之前,您需要将检查argc的if语句移动到。@jwodder啊!很高兴知道。谢谢。那么我是否要在if函数中设置int first_num和int second_num?索引从0@marsh:
argv[0]
是程序名。在调用atoi之前,您需要将检查argc的if语句移动到。@jwodder啊!很高兴知道。谢谢。那么我是否要在if函数中设置int first_num和int second_num?索引从0@marsh:
argv[0]
是程序名。在调用atoi之前,您需要将检查argc的if语句移动到。@jwodder啊!很高兴知道。谢谢。那么我是否将int first_num和int second_num放在if函数中?我仍然不完全明白为什么我必须将所有int定义放在else中。它是否仍在访问同一个变量?是的,但是只有当它们有效时才可以访问它们。@Ken你可以把
int product;
放在外面。但是如果你把
int second\u num=atoi(argv[2]);
放在外面,在你检查它是否真的有效之前,你将访问
argv[2]
。如果argc是例如1,那么你肯定不应该尝试索引
argv[2]
argc
告诉您
argv
中存在多少项。
argv
从0开始,因此如果
argc
为1,则
argv[0]
是唯一存在的元素。
argv[argc+1]
在技术上也存在,但它被指定为始终为空指针(并且您不能将空指针传递给atoi()。感谢您的澄清!我仍然不完全明白为什么我必须将所有int定义放在else中。它是否仍在访问同一个变量?是的,但它仅在它们有效时才访问它们。@Ken您可以将
int product;
放在外部。但是如果您将
int second\u num=atoi(argv[2])
外部,在检查它是否有效之前,您将访问
argv[2]
。如果argc是例如1,那么您肯定不应该尝试索引
argv[2]
argc
告诉您
argv
中存在多少项。
argv
从0开始,因此如果
argc
是1,那么
argv[0]
是唯一存在的元素。
argv[argc+1]
在技术上也存在,但它被指定为始终为空指针(并且不能将空指针传递给atoi()。感谢您的澄清!我仍然不完全明白为什么我必须将所有int定义放在else中。它是否仍在访问同一个变量?是的,但它仅在它们有效时才访问它们。@Ken您可以将
int product;
放在外部。但是如果您将
int second\u num=atoi(argv[2])
外部,在检查它是否有效之前,您将访问
argv[2]
。如果argc是例如1,那么您肯定不应该尝试索引
argv[2]
argc
告诉您
argv
中存在多少项。
argv
从0开始,因此如果
argc
是1,那么
argv[0]
是唯一存在的元素。
argv[argc+1]
在技术上也存在,但它被指定为始终为空指针(并且不能将空指针传递给atoi()。感谢您的澄清!我仍然不完全明白为什么我必须将所有int定义放在else中。它是否仍在访问同一个变量?是的,但它仅在它们有效时才访问它们。@Ken您可以将
int product;
放在外部。但是如果您将
int second\u num=atoi(argv[2]);
在外部,在检查它是否有效之前,您将访问
argv[2]
。如果argc是例如1,那么您肯定不应该尝试索引
argv[2]
argc
告诉您该文件中有多少项<