2014-10-02 41 views
0

我正在网上做一个基本的c编程问题。 基本上我所要做的就是把在输入(从控制台),说如何读取二进制计算器c的单个数字?

00000100+10000001 

,并产生正确的输出

00000011 

我发现一个算法,我可以用二进制转换成十进制和十进制二进制。我不需要那方面的帮助。 该问题指出你不应该使用数组(包含字符串)。我在想的是每次输入一个数字的用户输入,然后处理每个数字。然而,无论何时我使用

scanf("%d",&i) 

,输入总是前进到我想要避免的新行,以便输入和输出匹配。有谁知道如何从用户身上取下一位数字而不移动到下一行?

+1

您是否检查过['getc'](http://linux.die.net/man/3/getc)? – SleuthEye 2014-10-02 23:58:57

回答

1

如果我正确地理解了这个问题,数组(并因此字符串作为字符数组)被禁止,但通常字符I/O可能不是?如果是这种情况,您可以使用getc()一次读入并处理一个字符。

1

限制扫描的宽度。

if (scanf("%1d",&i) != 1) 
    Handle_Failure(); // This is likely the '+' in stdin. 

请记住,stdin通常是行缓冲。没有任何输入,直到用户完成该行,才会看到scanf()getc()等。


建议改为读取用户的输入行并处理缓冲区。如果需要,一次处理1 char

char buf[1000]; 
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_IOError_or_EOF(); 

char *s = buf; 
while (*s) { 
    Parse_Buffer(); 
    s++; 
} 
Do_Stuff(); 
+0

op表示不允许数组。所以这个代码示例是不可接受的。 – user3629249 2014-10-03 06:31:58