请会c语言的高手看看~

来源:百度知道 编辑:UC知道 时间:2024/06/15 20:20:26
题目要求输入n个字符统计其中数字字符,*号和字母个数。
我编的程序如下
#include<stdio.h>
main()
{int num1=0,num2=0,num3=0,n,i;
char ch;

printf("输入要输入字符的个数:");
scanf("%d",&n);

printf("输入字符:");

for(i=1;i<=n;i++)
{ch=getchar();
if(ch>='0'&&ch<='9')
num1++;
else if(ch=='*')
num2++;
else if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
num3++;
}
printf("数字个数=%d,*个数=%d,字母个数=%d\n",num1,num2,num3);}

执行结果如下。
输入要输入的字符个数:3
输入字符:213
数字个数=2,*个数=0,字母个数=0

当我给n赋值1的时候出现如下结果
输入要输入的字符个数:1
输入字符:数字个数=2,*个数=0,字母个数=0

为什么总是少一个字符? 循环体还是什么的问题 请求高人求解!

printf("输入要输入字符的个数:");
scanf("%d",&n);

你从键盘上输入一个数后,按的那个回车键,系统把它当成循环体中ch的第一个字符了.
你可以在此后加一个ch=getchar(),空读一下这个回车键即可.

改动如下:

printf("输入要输入字符的个数:");
scanf("%d",&n);
ch=getchar(); /*空读一下*/
printf("输入字符:");

for(i=1;i<=n;i++)
{ch=getchar();

以下不变.

你这样子再试一下.

#include<string.h>
#include<stdio.h>
main()
{char c;
int w=0,x=0,y=0,z=0;
while((c=getchar())!='\n')
{if((c>='a'&& c<='z')||(c>='A' && c<='z'))
w++;
else if (c==' ')
x++;
else if (c>='0' && c<='9')
y++;
else
z++;
}
printf("w=%d,x=%d,y=%d,z=%d",w,x,y,z);
}

在num3++; 后面加一句ch=getchar(); 就OK了。