C程序没有打印出我期望的内容。

3
所以我决定学习C语言,并使用“用困难的方式学习C语言”来学习。无论如何,我尝试编辑其中一个示例,但输出结果并不是我预期的。我从命令行调用程序为e14 asd,它“应该”打印出: 'e' == 101 'a' == 97 's' == 115 'd' == 100
但是,它根本没有打印出'd'行。我的代码如下:
#include <stdio.h>
#include <ctype.h>

void print_letters(int argc, char *arg[])
{
    int i = 0;
    int j = 0;
    for(j = 0; j < argc; j++) {
        for(i = 0; arg[i] != '\0'; i++) {

            char ch = arg[j][i];
            printf("j is %d and i is %d\n", j, i);

            if(isalpha(ch) || isblank(ch)) {
                printf("'%c' == %d \n", ch, ch);
            }
        }
        printf("\n");
    }
}


int main(int argc, char *argv[])
{
    print_letters(argc, argv);
    return 0;
}

我猜问题与argv部分有关,但是经过查找,我仍然不知道是什么导致了'd'没有出现。
如果有人能解释一下,我会非常感激。
谢谢!

1
你是如何启动程序的?你使用哪个命令行,传递了哪些命令行参数? - Andreas Fester
你尝试过调试你的代码吗? - Jabberwocky
@Jason White,我执行了你的代码,它打印出了i、j和d==100的值。但根据你的问题陈述,你提到“我仍然不知道是什么导致'd'没有显示”。但是根据输出结果,“d==100”已经显示了,请你提供更多细节... - Deadlock
2个回答

10
for(i = 0; arg[i] != '\0'; i++) {

应该是这样的

for(i = 0; arg[j][i] != '\0'; i++) {
//            ^^^
循环退出条件应该遍历单个命令行参数的字符,但实际上正在遍历参数。

谢谢!总是那些简单的事情让人叹息。 - Jason White
@JasonWhite 我强烈建议你学习如何使用调试器,这种错误使用调试器会更容易被发现。 - PeterK

0

在使用命令行参数之前,您应该知道argc计算参数的数量,argv是一个二维数组,用于存储这些参数。例如,如果可执行文件名为main.exe,并且您在命令行中键入main.exe asd,则参数的值应为:argc == 2argv[0] == 'main.exe'argv[1] == 'asd'。有关命令行参数用法的更多详细信息,请参阅解析C命令行参数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接