使用argv和argc进行打印

时间:2016-04-18 10:27:05

标签: c switch-statement argv argc

这是一个打印一些关于我自己的信息的程序 在此程序中,如果用户扫描/ 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);
}

2 个答案:

答案 0 :(得分:0)

您应该使用argc值来了解最后一个参数。或者你应该测试argv[i] == NULL。您好像不明白argvchar **,因此argv[i]char *,而不是char

还要学会使用getopt()或getopt_long()。

答案 1 :(得分:0)

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

使用argc来限制您测试的argv[]元素数量,以便您不会超出界限:
for (int i = 1; i < argc; i++) {

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

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

相关问题