首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

两个 c 语言的小疑点

2014-04-26 
两个 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

热点排行