Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中的字符串中的定义位置获取字符_C - Fatal编程技术网

在C中的字符串中的定义位置获取字符

在C中的字符串中的定义位置获取字符,c,C,我希望从键盘上读入一个数字,然后我必须分别处理每个数字(这是一个八进制到十进制的转换器)。 是否有类似于Java中charAt()方法的东西可以用于处理特定的数字 我目前有以下代码(不完整),但在编译时,它返回“错误:下标值既不是数组也不是指针” #包括 #包括 #包括 int main() { printf(“请输入以#结尾的八进制数字”); char nextNum=getchar(); 字符数; int counterUp=0;//记录输入的位数 int counterDown=1;//记

我希望从键盘上读入一个数字,然后我必须分别处理每个数字(这是一个八进制到十进制的转换器)。 是否有类似于Java中charAt()方法的东西可以用于处理特定的数字

我目前有以下代码(不完整),但在编译时,它返回“错误:下标值既不是数组也不是指针”

#包括
#包括
#包括
int main()
{
printf(“请输入以#结尾的八进制数字”);
char nextNum=getchar();
字符数;
int counterUp=0;//记录输入的位数
int counterDown=1;//记录转换过程中的进度
整数小数=0;
while(nextNum!='#')//读取整数,将字符组合在一起形成一个八进制数。
{
编号=(编号+下一个编号);
计数器++;
nextNum=getchar();
}
//开始从八进制到十进制的转换
while(计数器>=0)
{
整数相加=(数字[计数器]*(功率(8,计数器));
小数=(小数+加法);
反击++;
}
}
我不希望别人告诉我如何从八进制到十进制,只希望别人告诉我如何一次处理一个数字。

使用
fgets()
而不是一个字符:

char number[25]; // max of 25 characters in string

fgets(number, 24, stdin); // read a line from 'stdin', with a max of 24 characters
number[24] = '\0'; // append the NUL character, so that we don't run into problems if we decide to print the string

现在您可以随意下标
number
,例如
number[10]=“A”

我认为您需要后退一步,更仔细地研究您的算法

char number
存储什么?您希望这个循环做什么:

while(nextNum != '#') //reads in the whole number, putting the characters together to form one Octal number.
{
    number = (number + nextNum);
    counterUp++;
    nextNum = getchar();
}

特别是,什么是
number=(number+nextNum)平均值?

您需要将数字定义为字符数组

e、 g

然后将读取循环更改为附加到数组

while(nextNum != '#') 
{
     number[counterUp] = nextNum;
     counterUp++;
     nextNum = getchar();
}

我认为您已经习惯了Java方式,可以编写如下内容:

String number = "";
number += "3";
number += "4";
C中的字符串不是这样工作的。此代码不会执行您认为它可以执行的操作:

char number = 0;   // 'number' is just a one-byte number
number += '3';     // number now equals 51 (ASCII 3)
number += '4';     // number now equals 103 (meaningless)
也许这样的事情对你有用:

char number[20];
int i = 0;
number[i++] = '3';
number[i++] = '4';
或者,您可以简单地使用
scanf
从键盘读取数字


我建议你找一本关于C的好书,先读字符串,然后再读
scanf

请发布完整的编译器错误消息,并指出编译器标记为错误的代码行。错误的代码行是
int added=(number[counterUp]*(pow(8,counterDown))
因为
number
是一个字符,所以像数组类型一样访问它是没有意义的…使用下面建议的字符数组。nextNum从键盘读取下一个数字,并(至少我以前认为)将其附加到数字字符串的末尾。@user1247751
char number不是字符串。这是一个单一的字符。此外,C没有内置的字符串附加运算符。
char number = 0;   // 'number' is just a one-byte number
number += '3';     // number now equals 51 (ASCII 3)
number += '4';     // number now equals 103 (meaningless)
char number[20];
int i = 0;
number[i++] = '3';
number[i++] = '4';