在 C 中将整个字符数组转换为整数

标签 c

我正在从文件中读取输入,并尝试从我接收的字符串中创建一个数值。

我尝试简单地使用 atoi,但这对角色不起作用。 然后我尝试对字符数组使用 forloop,但后来出现错误,因为某些字符实际上是整数。 然后我尝试使用 ifstatement 检查字符本身是否是整数,然后手动将其添加到我的“总和”中。

但到目前为止我得到的只是错误和错误,我不确定我的逻辑错在哪里。

在 C 中,数组只是一个指针,对吗?因此,要访问某个索引处的值,我使用 *arr[num] 对吗?

这是我的代码

    char newlineC;
    char input[14];
    while(fscanf(fp,"%s%c",input, &newlineC)!=EOF){
        int val = 0;
        int x;
        for(x=0; x<14; x++){
            if(isdigit(*input[x])){
                val = val + input[x];           
            }else{
                int p = atoi(input[x]);
                val = val + p;              
            }
        }

我尝试过 strol 功能...也没有用。我已经从事这个工作太久了,我觉得自己很愚蠢,以至于我被一些看似简单的事情难住了。如有任何帮助,我们将不胜感激。

最佳答案

您到处传递了错误的类型。

char input[14];

这声明了一个维度为 14 的 char 数组。input[i] 是第 ichar 数组,它的类型为 char。它不是一个指针,你不能取消引用它, 这就是 *input[x] 失败的原因。事实上编译器应该给你一个 那里有错误,这个错误:

invalid type argument of unary ‘*’ (have ‘int’)

atoi有同样的问题。它需要一个指向 char 的指针,该指针指向 字符串。 input[x] 是单个char,您无法传递给atoi。再次 编译器应该警告你。

fscanf(fp,"%s%c",input, &newlineC)

这非常笨拙。如果输入的字符大于13个字符,则 缓冲区溢出。更好的方法是:

fscanf(fp, "%13s%c", input, &newline);

或者更好

int val;
fscanf(fp, "%d", &val);

另一个错误:如果您知道 input[x] 是一个数字,那么输入的整数 数字表示为input[x] - '0'。所以计算应该是这样的:

val = val + input[x] - '0';

总的来说,我会使用fgetsstrtol:

while(fgets(input, sizeof input, fp))
{
    long int val;
    char *tmp;

    val = strtol(line, &tmp, 0);

    if(*tmp == 0 || *tmp == '\n')
        printf("An integer was read: %ld\n", val);
    else
        printf("More than an integer was read: '%s'\n", line);
}

关于在 C 中将整个字符数组转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48837599/

相关文章:

c - 多线程 C 应用程序中的访问冲突

Ceedling 项目文件无法识别路径和库

C数组地址混淆

c - strcat(a[1] ,"22") 如何使用? C语言编程

c - 在什么阶段抛出错误?

c - 函数没有通过某些测试用例

声明不带参数的函数原型(prototype)会造成安全漏洞吗?

c - 预增量和后增量

c - 套接字 recv() 卡在带有 MSG_WAITALL 的大消息上

python - SWIG Python 绑定(bind)到本地代码不适用于 OpenCV 2.1