我试图创建的代码需要将输入的数字从2-9进制转换为十进制。(c语言)
我们的计划是检查每个输入字符本身,看看它是否与给定的基础可行,如果是,然后通过以下方式计算其十进制值:char * base^(digital index-1)(不知道怎么写,但这里的大多数人可能知道我的意思)
然而,无法保证用户将输入多少数字,因为getchar()将给予输入的第一个字符,这意味着“power”将从最高值开始。
问题是--如何在不破坏缓冲区的情况下找出缓冲区中有多少个字符?我可以找出缓冲区中有多少个字符,但这需要我把它们都拉出来。
我仍然没有尝试任何东西,因为我不知道如何处理这个问题。
2条答案
按热度按时间kjthegm61#
C标准没有提供一种方法来知道输入缓冲区中有多少字符而不阅读它们。1 C实现可能会提供这样的功能作为扩展。但是,没有必要处理数字并转换为另一个基数。只需保留一个从零开始的运行值。当读取每个数字时,将运行值乘以基数并添加新的数字。例如,当阅读“345”为八进制时,从0开始,看到“3”,计算0·8+3 = 3,看到“4”,计算3·8+4 = 28,看到“5”,计算28·8+5 = 229。
在其他情况下,你需要在处理一个字符串的前几部分之前知道它的长度,读取整个字符串,使用
malloc
和realloc
来分配足够的内存来保存字符串。一旦整个字符串被读取,它的长度是已知的,它可以按照任何需要的顺序被处理。脚注
1有一些文件定位功能可用于扫描整个文件,然后备份到以前的部分,但这些功能不适用于来自交互式设备的输入流。
rnmwe5a22#
重新思考这个问题。如果用户输入了一个无效的数字(或非数字),该怎么办?合理的React是丢弃该行输入的其余部分。
解决方案:忘掉
getchar()
,使用fgets()
将整行读入程序的工作区,然后验证并处理数组中的每个字符。处理输入“批发”(批量),而不是“零售”(逐项)。