【问题标题】:I had just started learning programming in C language and I faced a simple problem, but I didn't know how to implement it刚开始学C语言编程,遇到一个简单的问题,但是不知道怎么实现
【发布时间】:2023-02-03 19:52:51
【问题描述】:

我想编写一个从命令行接受三个参数的程序。两个参数是 数字,而一个参数是操作之一。主要功能 应该读取这些参数,如果参数的数量不是 3,那么程序应该 返回值 -9999 并退出。

如果参数个数是 3,那么程序应该执行 两个数之间的运算,并返回运算结果。

我已经写了几行,但我知道我的代码还没有完成。 谁能帮我写出正确的?

#include <stdio.h>
 
void main(int argc, char * argv[])
{
    int a, b, result;
    char ch;
 
    printf("enter two numbers and the operation to apply on: \n");
    a = atoi(argv[1]);
    b = atoi(argv[2]);
    ch  = *argv[3];
    printf("%d %d %c", a, b, ch);
    switch (ch)
    {
    case '+':
        result = a + b;
        break;
    case '-':
        result = a - b;
        break;
    case 'x':
        result = a * b;
        break;
    case '/':
        result = a / b;
        break;
}
    printf("\nThe result of the operation is %d", result);
    printf("\n");    
}

【问题讨论】:

  • 能否请你更具体一点,为什么代码不完整?
  • 首先 - 将 main() 函数返回类型更改为 int 并包括 stdlib.hatoi() 需要)。您还需要围绕参数计数和参数值进行一些错误处理。
  • “如果参数数量不是 3”这意味着您需要检查 argc 以查看传递了多少个参数。请注意,它至少为 1,因为可执行文件的名称始终在 argv[0] 中传递。

标签: c


【解决方案1】:

在尝试访问参数之前检查argc

if (argc != 4) {
    /* Print usage message and exit */
}

如果参数个数不是 3,那么程序应该返回 值 -9999 并退出。

这是一个任意的要求。使用 EXIT_FAILUREEXIT_SUCCESS 而不是用幻数使代码混乱。


atoi(argv[1]);

不提供任何错误检查方法。考虑改用strtol()

在旁边:

  • 除以零会出现未定义的行为。 来自 C11 6.5.5 第 5 段:

/ 运算符的结果是除法的商 第二个操作数的第一个; % 运算符的结果是 余。在这两个操作中,如果第二个操作数的值为 零,行为未定义。

  • 您缺少头文件。
  • 应声明 main() 以返回 int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多