我试图创建的代码需要将输入数字从2-9基数转换为十进制。(c语言)
计划是检查每个输入字符本身,看看它是否与给定的基数可行,如果是,然后通过:char * base^(数字索引-1)计算其十进制值(不确定如何写这个,但大多数人可能知道我的意思)
然而,不能保证用户将输入多少个数字,因为getchar()将给出输入的第一个字符,该字符表示"power";将从最高值开始。
问题是-如何在不破坏缓冲区的情况下找出缓冲区中有多少字符?我可以找出缓冲区中有多少字符,但恐怕需要我将它们全部取出。
我还没有尝试过什么,因为我不知道如何处理这个问题。
C标准没有提供一种方法来知道输入缓冲区中有多少字符而不读取它们。1C实现可能会提供这样的特性作为扩展。但是,不需要处理数字并转换为另一种进制。只需保持一个从0开始的运行值。当读取每个数字时,将当前值乘以基数并加上新数字。例如,当读取"345"为八进制时,从0开始,看"3",计算0•8+3 = 3,看"4",计算3•8+4 = 28,看"5",计算28•8+5 = 229。
在其他情况下,在处理字符串的前面部分之前需要字符串的长度,请读取整个字符串,使用malloc
和realloc
分配足够的内存来保存字符串。一旦读取了整个字符串,它的长度就已知了,并且可以按所需的任何顺序进行处理。
脚注
1有一些文件定位函数可以用来扫描一个文件,然后备份到以前的部分,但是这些函数在来自交互式设备的输入流上不起作用。
重新思考这个问题。如果用户输入无效的数字(或非数字),计划是什么?合理的反应是丢弃该输入行的其余部分。
解决方案:忘记getchar()
,使用fgets()
将整行读入程序的工作区。然后验证&处理该数组中的每个字符。
处理输入"wholesale"(散装),而不是"零售"。(一项一项)