我正在从文件中读取输入,并尝试从我接收的字符串中创建一个数值。
我尝试简单地使用 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]
是第 i
个 char
数组,它的类型为 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';
总的来说,我会使用fgets
和strtol
:
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/