【问题标题】:printing using argv and argc使用 argv 和 argc 打印
【发布时间】:2016-04-18 23:38:40
【问题描述】:

这是一个打印一些关于我自己的信息的程序 在这个程序中,如果用户扫描 /n 它打印名称和 等等,但是当我使用 gcc 运行这个程序时,它什么也没打印。 我需要使用 argv 和 argc 扫描参数。 我该如何解决?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 10

int main(int argc, char** argv)
{
    for (int i = 1; i < SIZE; i++)
    {
        if (argv[i] == ' ')
        {
            break;
        }
        if (argv[i] == 'n' || argv[i] == 'b' || argv[i] == 'f' || argv[i] == '?' && argv[i - 1] == '/')
        {
            switch (i)
            {

            case 'n':
                printf("my name is : Daniel Zingerman \n");
                break;
            case 'b':
                printf("my birth date is: 2/11 \n");
                break;
            case 'f':
                printf("my favorite food is: ice cream \n");
                break;
            case '?':
                printf("the instruction of the program:");
                printf("There is a lot of parameters you can scan into the program:");
                printf("1. /n - printing the name");
                printf("2. /b - printing the birth date");
                printf("3. /n - printing the favorite food");
                printf("4. /? - printing the instructions");

                break;
            }
        }


    }
    system("pause");
    return(0);
}

【问题讨论】:

  • 你遇到这个程序的第一个惊喜是什么?
  • 使用 string.h 中的 strcmp 比较字符串。 argc 应该限制你的 for 循环,而不是 SIZE。
  • case '/n': 到底是什么?
  • 还有更严重的问题,程序无法编译。
  • 当命令行参数少于 10 个时会发生什么?

标签: c switch-statement argv argc


【解决方案1】:

您应该使用 argc 值来知道最后一个参数是什么。或者你应该测试argv[i] == NULL。你似乎不明白argvchar **,所以argv[i]char *,而不是char

也学会使用getopt(),或者getopt_long()。

【讨论】:

    【解决方案2】:

    argv[] 数组是从argv[0] 中的程序名称创建的,然后是由空格分隔的命令行参数
    /n /b /f 将在argv[1], argv[2] &amp; argv[3] 中返回,而不是作为argv[1] 中的单个“字符串”

    使用argc来限制你测试argv[]的元素数量,这样你就不会越界:
    for (int i = 1; i &lt; argc; i++) {

    现在您需要检查您是否有有效的命令行参数:
    if ((strcmp(argv[i], "/n") == 0) || ...

    由于案例测试需要整数值,请使用 argv[i] 的第二个元素:
    switch (argv[i][1]) {

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-06
      • 2011-04-25
      • 2011-04-15
      • 2012-04-20
      • 1970-01-01
      • 2020-11-03
      • 2013-09-08
      • 2013-05-27
      相关资源
      最近更新 更多