You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将main函数中的argv[1]传入外部函数?CS50库使用疑问

问题解答

一、argv[1]传递到only_digits的方法

你当前代码里已经实现了正确的传递逻辑,两种写法都可行:

  • 方式1(你代码中的写法):先将argv[1]赋值给临时变量s,再传入函数
    string s = argv[1];
    x = only_digits(s);
    
  • 方式2(简化写法):直接将argv[1]作为参数传入,无需临时变量
    x = only_digits(argv[1]);
    

二、<cs50.h>中string和bool的使用说明

1. string的使用

<cs50.h>里的string是char*的别名(typedef),你代码中string s = argv[1];以及函数参数string s的写法完全符合CS50的规范,是正确的。

2. bool的使用

你的代码存在几个不规范/错误点:

  • 语法错误:only_digits函数定义时末尾多了分号,正确写法是bool only_digits(string s) { ... }
  • 返回值规范:bool类型的标准返回值是true和false(小写),虽然C语言中1等价于true、0等价于false,但用bool字面量更符合类型语义
  • 变量类型匹配:接收bool返回值的x,应该声明为bool x;而非int x;,这样类型更匹配
  • 函数逻辑错误:原函数只要第一个字符是数字就返回1,不会检查后续字符,正确逻辑应该是遍历所有字符,只要有一个非数字就返回false,全部检查通过才返回true

修正后的核心代码示例

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

bool only_digits(string);

int main(int argc, string argv[])
{
    // 直接传递argv[1],用bool类型变量接收返回值
    bool x = only_digits(argv[1]);
    if (x == true)
    {
        printf("True\n");
    }
    else
    {
        printf("False\n");
    }
}

// 修正语法和逻辑的only_digits函数
bool only_digits(string s)
{
    for (int i = 0; i < strlen(s); i++)
    {
        // 发现非数字字符立即返回false
        if (!isdigit((unsigned char)s[i]))
        {
            return false;
        }
    }
    // 所有字符都是数字,返回true
    return true;
}

内容的提问来源于stack exchange,提问作者CardCase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:09:25