【发布时间】:2018-04-10 03:40:25
【问题描述】:
这个程序应该遍历一个由 0 和 1 组成的数组,并计算有多少个 0、1 和所有组合在一起的字符。 但是,循环内的 print 语句会打印出一堆“48”和“49”。 即使正确计算了字符数,它似乎也不是从“if 语句”中的指针中提取值,而是获取内存地址。
代码本身:
#include <stdio.h> /* using printf, gets, BUFSIZ */
int main(int argc, char *argv[])
{
char input[BUFSIZ];
int n;
char *labelPtr;
int zeroCount=0;
int oneCount=0;
n=0;
gets(input);
while(input[n])
{
labelPtr=&input[n];
printf("%d \n", *labelPtr);
if (*labelPtr==0)
{
zeroCount++;
}
if(*labelPtr==1)
{
oneCount++;
}
n++;
}
printf("The number of characters is %d \n", n);
printf("The number of zeros is %d \n", zeroCount);
printf("The number of ones is %d \n", oneCount);
}
【问题讨论】:
-
在本世纪没有充分的理由使用
gets。这是一个损坏的功能。 -
asciitable.com -- 一切都会变得清晰......(例如,十进制
48是 ASCII'0'- 或 - ASCII'0'是十进制48- 选择),为'1'...加1(提示:你printf ("%c", ...)或putchar()打印一个字符,你使用"%d"输出一个“十进制”。) -
你需要用火烧掉你现在的 C 书/老师,换一本现代的。
-
谢谢你们,帮了大忙。这实际上是我第一次用 C 编程。我知道这个问题的某些方面已经过时了,但我认为这是我的教授故意这样做的,目的是让我们了解指针和字符在 C 中是如何工作的。谢谢非常感谢所有帮助过的人!