0

我想知道如何通过命令行获取其他输入?我想寻找“-w”和一个数字,所以它看起来像“-w60”和“-s”。这个输入是通过命令行给出的,所以它看起来像这样:


c:\用户\用户名\桌面> wrapfile.exe -w5 -s test.txt

输出应如下所示:

你好  
,  
这个  
是一个  
测试

-w5 和 -s 的意思是:

-w5 = 宽度(一次只能显示 5 个字符)

-s = 间距(包括间距,因此尽可能多地容纳整个单词)

我想创建一个扫描这两个字符的函数,如果有人知道如何格式化输出以便它完成它需要做的事情,那也会有所帮助。

我只是有点困惑,我已经在这个程序上工作了一段时间,我只是想了解如何正确扫描和使用这些东西。

这是我当前的代码,它从命令行接收无限数量的文本文件:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{

    int l = 1;
    while(l != argc)
    {
        FILE *fp;    

        fp = fopen(argv[l], "rb");
        l++;

        if (fp != NULL) 
        {
        int i = 1;
        do
        {
            i = fgetc(fp);   
            printf("%c",i);
            printf(" ");
        }
        while(i!=-1);
        fclose(fp);
        }
        else
        {
        printf("Error.\n");
        }
    }
}

/*

void scanningForWS(int argc, char **argv)
{
}

*/
4

2 回答 2

2

如果你传递-w5 -s test.txt给你的程序,你的 argv 是:

argv[0] = "wrapfile.exe" 
argv[1] = "-w5" 
argv[2] = "-s" 
argv[3] = "test.txt"

所以:

int l = 1;
fp = fopen(argv[l], "rb");

肯定不是你想要的。

出于说明目的...为了打印到“受限”宽度,您可以执行以下操作:

char * h = "this is a string longer than width"; // you'd get this from your file
int width = argv[1][2] - '0'; // you wouldn't hardcode this...
int count;

for(count = 0; count < strlen(h); count++){
    if((count % width) < width - 1)
        printf("%c", str[count];
    else
        printf("%c\n", str[count];
}
于 2012-12-07T16:32:41.357 回答
0

我觉得getopt使用起来很麻烦。编写自己的测试并不太难。例如:

#include <string.h>
#include <stdio.h>

int main(int argc, char **argv) {
   int haveSpacing = 0;
   int haveWidth = 0;
   FILE *fp = 0;
   while (*++argv) {
      if (!strcmp(*argv, "-s")) { // check for -s switch
         haveSpacing = 1;
      }
      else if (sscanf(*argv, "-w%d", &haveWidth) == 1) { // check for -wxx
      }
      else if (**argv == '-') { // reject anything else beginning with "-"
         printf("invalid switch %s\n", *argv);
         return 1;
      }  
      else if (argv[1]) { // filenaname must be last arg, so arg[1] must be NULL
         printf("invalid arg %s\n", *argv);
         return 1;
      }
      else if (!(fp = fopen(*argv, "rb"))) { // open last arg, the filename
         perror(*argv);
         return 1;
      }
   }
   if (!fp) {
      printf("missing filename\n");
      return 1;
   }

   // ...
   return 0;
}
于 2012-12-07T17:16:38.250 回答