Getopt 没有获取我的输入并将其存储在 C 中
Getopt not grabbing and storing my input in C
这是我第一次 post 访问此站点,因此请原谅任何格式错误。
我正在编写一个小程序以从文件中获取简单信息,例如单词数量、排序等。但是我只是通过使用 getopt 开始,因为我想使用命令行来解析我的命令。这是我到目前为止所拥有的。
#include <stdio.h>
#include <stdlib.h>
int value = 0;
int main(int argc, char **argv) {
extern char *optarg;
extern int optind;
int c, err = 0;
int cflag = 0, sflag = 0, fflag = 0;
char *substring;
// usage from instructions in case of error
static char usage[] = "usage: mywords [-cs] [-f substring] filename";
// only f flag requires additional input
while ((c = getopt(argc, argv, "csf:")) != -1)
switch (c) {
case 'c':
cflag = 1;
break;
case 's':
sflag = 1;
break;
case 'f':
fflag = 1;
printf("Before assigning to substring\n");
substring = optarg;
printf("After\n");
break;
case '?':
err = 1;
break;
}
if (fflag = 1) {
printf("%c ", &substring);
}
}
在 运行 我的 makefile(运行 成功且没有错误)之后,我将在命令行中输入类似这样的内容:
mywords -f test
理想情况下输出为
test
我在 fflag 中的 printf 语句是简单的测试打印,以查看我是否到达那里。提前感谢您的帮助。
编辑
已修复。大卫柯林斯的答案是正确的。非常感谢大家
我注意到您的代码中存在三个问题。 (可能还有其他小问题,但解决以下问题应该会让你振作起来,我认为 运行。)
相等性测试
您应该使用 if (fflag == 1)
而不是 if (fflag = 1)
。
指针取消引用
如果要检索 substring
指向的字符的值,可以使用 *substring
而不是 &substring
。
但您可能不想这样做。见下文。
printf()
格式说明符
打印字符串/字符数组时,使用%s
说明符而不是%c
。 (%c
用于单个字符)。所以你应该
if (fflag == 1) {
printf("%s ", substring);
}
或者 - 更简单 - 只是
if (fflag) {
puts(substring)
}
因为任何非零值在 C 中的计算结果为真(并且您在程序开始时将 fflag
初始化为零)。
这是我第一次 post 访问此站点,因此请原谅任何格式错误。 我正在编写一个小程序以从文件中获取简单信息,例如单词数量、排序等。但是我只是通过使用 getopt 开始,因为我想使用命令行来解析我的命令。这是我到目前为止所拥有的。
#include <stdio.h>
#include <stdlib.h>
int value = 0;
int main(int argc, char **argv) {
extern char *optarg;
extern int optind;
int c, err = 0;
int cflag = 0, sflag = 0, fflag = 0;
char *substring;
// usage from instructions in case of error
static char usage[] = "usage: mywords [-cs] [-f substring] filename";
// only f flag requires additional input
while ((c = getopt(argc, argv, "csf:")) != -1)
switch (c) {
case 'c':
cflag = 1;
break;
case 's':
sflag = 1;
break;
case 'f':
fflag = 1;
printf("Before assigning to substring\n");
substring = optarg;
printf("After\n");
break;
case '?':
err = 1;
break;
}
if (fflag = 1) {
printf("%c ", &substring);
}
}
在 运行 我的 makefile(运行 成功且没有错误)之后,我将在命令行中输入类似这样的内容:
mywords -f test
理想情况下输出为
test
我在 fflag 中的 printf 语句是简单的测试打印,以查看我是否到达那里。提前感谢您的帮助。
编辑
已修复。大卫柯林斯的答案是正确的。非常感谢大家
我注意到您的代码中存在三个问题。 (可能还有其他小问题,但解决以下问题应该会让你振作起来,我认为 运行。)
相等性测试
您应该使用 if (fflag == 1)
而不是 if (fflag = 1)
。
指针取消引用
如果要检索 substring
指向的字符的值,可以使用 *substring
而不是 &substring
。
但您可能不想这样做。见下文。
printf()
格式说明符
打印字符串/字符数组时,使用%s
说明符而不是%c
。 (%c
用于单个字符)。所以你应该
if (fflag == 1) {
printf("%s ", substring);
}
或者 - 更简单 - 只是
if (fflag) {
puts(substring)
}
因为任何非零值在 C 中的计算结果为真(并且您在程序开始时将 fflag
初始化为零)。