两个 c 语言的小问题#includeint main(){char cdo{cgetchar()printf(3\n)}while(cy||
两个 c 语言的小问题
#include<stdio.h>
int main()
{
char c;
do
{ ;
c=getchar();
printf("3\n");
}while(c=='y'||c=='Y');
}
应该是第一次输入一个字符,然后输出一个3,如果字符等于y或者Y,那么继续循环,但是第一次输入y之后,输出了两个3,也就是花括号里面执行了两次,然后就结束了,并且只输入了一次,没有输入第二次,,这是怎么回事?
#include<stdio.h>
#define N 2
int main()
{
int i,code[2];
char name[2];
float price[2];
for(i=0;i<N;i++)
{
printf("Please input the name,code,price:");
scanf("%c %d %f",&name[i],&code[i],&price[i]);
}
printf("Name Code Price\n");
for(i=0;i<N;i++)
{
printf("%c %d %f \n",name[i],code[i],price[i]);
}
}
每次都输入 a 2 2.2 发现最后输出的结果数据不对。希望有人能解答,不胜感激
[解决办法]因为getchar是输入字符的,它吃字符;当你输入y的时候getchar是y,然后输出3,接着有个回车,getchar默认你输入的事回车,不是y就结束了
[解决办法]#include<stdio.h>
void main()
{ char c;
do
{
c=getchar();
printf("3\n");
getchar();
}while(c=='y'
[解决办法]c=='Y');
}
[解决办法]#include<stdio.h>
#define N 2
int main()
{
int i,code[2];
char name[2];
float price[2];
for(i=0;i<N;i++)
{
printf("Please input the name,code,price:");
scanf("%c %d %f",&name[i],&code[i],&price[i]);
getchar();
}
printf("Name Code Price\n");
for(i=0;i<N;i++)
{
printf("%c %d %f \n",name[i],code[i],price[i]);
}
}
[解决办法]你是输入的y加回车两个字符,第一次打印一个3然后判断是y继续循环,这时候c=getchar();
c=回车 ,打印一个3,然后while判断不是y或者Y,结束循环。
可以 看下我以前的测试,
http://blog.csdn.net/terhack/article/details/5425915
因为getchar,scanf这些函数不自动清空输入输出缓冲区,必须人为手动清空,所以输入最好用cin不要用,你用cin就正确了。
[解决办法]你这两个问题都是没有清除 你输入时候 的 '\n'。 用getchar()接收一下就好了。
1 #include<stdio.h>
2 #define N 2
3
4 int main()
5 {
6 int i,code[2];
7 char name[2];
8 float price[2];
9 for(i=0;i<N;i++)
10 {
11 printf("Please input the name,code,price:");
12 scanf("%c %d %f",&name[i],&code[i],&price[i]);
13 getchar();
14 }
15
16 printf("Name Code Price\n");
17 for(i=0;i<N;i++)
18 {
19 printf("%c %d %f \n",name[i],code[i],price[ i]);
20 }
21 }
[解决办法]
getchar 读了回车符 maybe
[解决办法]
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
p=s;
while (1) {
k=sscanf(p,"%d%n",&v,&n);
printf("k,v,n=%d,%d,%d\n",k,v,n);
if (1==k) {
p+=n;
} else if (0==k) {
printf("skip char[%c]\n",p[0]);
p++;
} else {//EOF==k
break;
}
}
printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
[解决办法]第一个问题的解答:
在你的程序中添加一条语句,你就会明白了:
#include<stdio.h>
int main()
{
char c;
do
{ ;
c=getchar();
printf("3\n");
printf("%d\n", c);
}while(c=='y'
[解决办法]c=='Y');
}
当你输入y然后敲回车后,系统是认为你输入了两个字符:y和'\n'.
所以输出两个3, 然后程序结束。 PS:'\n'的ASCII值为10