C语言,求助!!!
做了一个统计输入的各个数字、空白符(空格、制表符、换行符)以及所有其他字符出现的次数,并分别存储在变量num,blank,others里边打印的程序。但是运行结果却是乱码,求大神指点!!!{:9_221:}下面是我写的代码:
#include<stdio.h>
int main()
{
int a,b,d,i,j,k;
int num={0};
char blank={'\n'},others={'?'},c;
a=b=d=0;
while((c=getchar())!=EOF)
{
if((c==' ')||(c=='\t')||(c=='\n'))
{ blank=c;++b;}
if((c>=0)||(c<=9))
{ num=c;++a;}
else
others=c;++d;
}
for(i=0;i<a+1;i++)
printf("%d,",num);
for(j=0;j<b+1;j++)
printf("%c,",blank);
for(k=0;k<d+1;k++)
printf("%c,",others);
printf("%d,%d,%d\n",a-1,b-1,d-1);
return 0;
} 你的程序是个死循环 ! 因为 EOF 是一个标志,它是不能由键盘输入的。若由键盘输入 EOF,编译器会认为是输入了三个字母 E、O、F #include<stdio.h>
int main()
{
int a = 0, b = 0, d = 0, i, j, k;
int num = { 0 };
char blank, others, c; // blank、others 没有必要初始化
while ((c = getchar()) != '\n')
{
if ((c == ' ') || (c == '\t') || (c == '\n'))
{
blank = c;
++b; // b 没有初始化
}
if ((c >= '0') && (c <= '9'))// 数字是一个整体,要用 && ,不能用 ||;并且输入的是字符型数字,要加单引号
{
num = c;
++a; // a 没有初始化
}
else
{ // 不加花括号,无论前面是哪种情况,++d 都会自加一次,是输出乱码的来源
others = c;
++d; // d 没有初始化
}
}
for (i = 0;i < a;i++)
printf("%c,", num);
printf("\n"); // 不换行,输出的数据将堆一起,无法分辨
for (j = 0;j < b;j++)
printf("%c,", blank);
printf("\n"); // 不换行,输出的数据将堆一起,无法分辨
for (k = 0;k < d;k++)
printf("%c,", others);
printf("\n"); // 不换行,输出的数据将堆一起,无法分辨
printf("%d,%d,%d\n", a - 1, b - 1, d - 1);
return 0;
} 风过无痕1989 发表于 2021-1-7 14:42
多谢大神{:10_297:}!但是还有一些问题,就是在输入空格的时候,他还会被算到其他字符里面,结果输出的时候会在数组blank和others里面都有,其他字符的计数也加上了空格的次数,这是什么情况啊?还有就是,如果我要输入一篇文章的话,那回车作为结束字符的话不就不能正常统计了吗?当时我在CSDN上搜了EOF这个,上面说他相当于F6或者Ctry+z 把它输入在行的最前面时再按回车就可以退出了。 初夏沁梨 发表于 2021-1-7 16:00
多谢大神!但是还有一些问题,就是在输入空格的时候,他还会被算到其他字符里面,结果输出的时 ...
我没有帮你修改程序,只是在你自己的程序上,告诉你,出了些什么样的错误 风过无痕1989 发表于 2021-1-7 16:18
我没有帮你修改程序,只是在你自己的程序上,告诉你,出了些什么样的错误
谢谢!!!{:10_297:} 初夏沁梨 发表于 2021-1-7 16:00
多谢大神!但是还有一些问题,就是在输入空格的时候,他还会被算到其他字符里面,结果输出的时 ...
帮你加了一个数组,记录字母
#include<stdio.h>
int main()
{
int a = 0, b = 0, d = 0, c = 0, i;
char num, blank, others, letter, ch;
while ((ch = getchar()) != '\n')
{
if ((ch == ' ') || (ch == '\t') || (ch == '\n'))
{
blank = ch;
++b;
}
else if ((ch >= '0') && (ch <= '9'))
{
num = ch;
++a;
}
else if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
{
letter = ch;
++c;
}
else
{
others = ch;
++d;
}
}
for (i = 0;i < a;i++) // 输出数字
printf("%c,", num);
printf("\n");
for (i = 0;i < b;i++) // 输出空格
printf("%c,", blank);
printf("\n");
for (i = 0;i < c;i++) // 输出字母
printf("%c,", letter);
printf("\n");
for (i = 0;i < d;i++) // 输出其他
printf("%c,", others);
printf("\n");
printf("数字:%d 个,空格:%d 个,字母:%d 个,其他:%d 个\n", a, b, c, d);
return 0;
} 风过无痕1989 发表于 2021-1-7 17:12
帮你加了一个数组,记录字母
谢谢!!!{:7_126:}
看到这个我发现刚刚那个时第二个if前没加else,导致出现问题{:7_113:}
页:
[1]