如何将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
相关产品推荐
相关产品推荐

