| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 651 人关注过本帖
标题:求助大神,为什么总是要输入两次n
只看楼主 加入收藏
飘叶csc
Rank: 2
等 级:论坛游民
帖 子:23
专家分:34
注 册:2013-11-13
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
求助大神,为什么总是要输入两次n
  /*程序主要功能:输入一个十进数,将其转换成 N 进制数(0<N<=16)*/
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#define stack_size 100
#define stack_extra_size 10
typedef struct
{
    int *base;
    int *top;
    int stacksize;
}stack,*pstack;






void main()
{
    long n; int N; long t;
    char kb=" ",ch;
    printf("说明:\n此程序的主要功能是:将一个十进制数转换成N进制数(0<N<=16)\n输入“#”退出程序\n请注意输入数据的正确性\n");


    while(kb!='#')
    {
            printf("请输入十进制数n:");
            scanf("%ld",&n);
            while((scanf("%ld",&n))!=1)//剔除错误输入
            {
                while((ch = getchar())!='\n' )
                getchar(ch);
                printf("输入错误,请重新输入一个正确的十进制整数,如10或者50\n请重新输入:");
            
                scanf("ld",&n);
            }
         
   

            printf("请输入需要转换的进制N:\n");
            scanf("%d",&N);
            while ((N>=1&&N<=16)!=1)
            {
                getchar();
                printf("输入错误,请重新输入一个1~16的正整数:");
                 scanf("%d",&N);
            }
           
             t=n+N;//此是测试····
            printf("此是测试····经过和%ld",t);
        
            printf("继续?");
            getchar();
               scanf("%c",&kb);
    }
}

这个是我写那个进制转换用的主函数,就是不知为什么要输入两次n,并且只是读取了第二个数据;求解?
还有,可不可以帮我弄出把十进制转换成1~16进制的函数弄出来?真心不会,想得头痛了。用链表~~~谢谢
搜索更多相关主题的帖子: include 十进制 
2014-02-20 22:46
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:3 
printf("请输入十进制数n:");
            scanf("%ld",&n);
            while((scanf("%ld",&n))!=1)//剔除错误输入

因为你写了两个  scanf   ,前面一个删去吧

三十年河东,三十年河西,莫欺少年穷!
2014-02-20 23:34
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
注释掉一个
2014-02-20 23:49
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 3楼 tlliqi
san shi fen hai mei gei wo ne ....

想抽苏烟了。
2014-02-21 01:09
飘叶csc
Rank: 2
等 级:论坛游民
帖 子:23
专家分:34
注 册:2013-11-13
收藏
得分:0 
回复 2楼 韶志
为什么不可以有两个?在while 那个我的是判断来着

[ 本帖最后由 飘叶csc 于 2014-2-21 13:13 编辑 ]
2014-02-21 08:45
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 5楼 飘叶csc
对啊   是判断不假

但是判断里面的scanf也要输入啊

三十年河东,三十年河西,莫欺少年穷!
2014-02-21 11:28
飘叶csc
Rank: 2
等 级:论坛游民
帖 子:23
专家分:34
注 册:2013-11-13
收藏
得分:0 
回复 6楼 韶志
那怎么可以实现剔除输入错误的数据?比如我输入0.3这个转换程序就挂了
2014-02-21 13:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
简单的写了一个   如有bug 请指出
程序代码:
#include <stdio.h>

int index=0;
void dec2yyy(int yyy,int source,char* bin)
{
    if(source==0) return;
    dec2yyy(yyy,source/yyy,bin);
    if((source%yyy)<10) bin[index]=(char)(source%yyy+0x30);
    else bin[index]=(char)(source%yyy+0x37);
    index++;
}

int main(int argc, char *argv[])
{
    int dec,yyy,n,i;
    char t[30]={'\0'};
    while(1)
    {
        printf("请分别输入2个十进制数,顺序为待转换数,待转换进制数\n中间用逗号分开,例如 555,8---->(输-1退出程序):");
        n=scanf("%d,%d",&dec,&yyy);
        fflush(stdin);
        if(dec==-1) break;
        if(n!=2) { printf("\n输入错误,请检查\n\n");continue;}
        if(yyy>16 || yyy<2) { printf("\n输入错误,请检查\n\n");continue;}
        dec2yyy(yyy,dec,t);
        printf("\n\n------------%d进制的 %d 等于 %d 进制的%s\n\n\n",10,dec,yyy,t);
        index=0;
        for(i=0;i<30;i++) t[i]='\0';

    }

    return 0;
}




DO IT YOURSELF !
2014-02-21 15:36
飘叶csc
Rank: 2
等 级:论坛游民
帖 子:23
专家分:34
注 册:2013-11-13
收藏
得分:0 
回复 8楼 wp231957
程序貌似没有错误,就是那错误检测太蛋疼了,输入也有点蛋疼~~~
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):0.3,16

输入错误,请检查

请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):h,

输入错误,请检查

请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):好,565

输入错误,请检查

请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):16,20

输入错误,请检查

请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):蛋疼,16

输入错误,请检查

请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):66,16


------------10进制的 66 等于 16 进制的42


请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):         *45,10

输入错误,请检查

请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):-1
Press any key to continue

我的缺陷代码:   /*程序主要功能:输入一个十进数,将其转换成 N 进制数(0<N<=16)*/
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<malloc.h>
typedef char DataType;
#define STACK_SIZE 100

 typedef struct{                       
      DataType *top;
      DataType *base;
      int stack_size;
 }seqstack;

 void init(seqstack *s)//创建空栈
 {
      s->base=(DataType *)malloc(STACK_SIZE*sizeof(DataType));
     if(!s->base) exit(-1);
      s->top=s->base;
      s->stack_size=STACK_SIZE;
 }

 int IsEmpty(seqstack *s)//判断栈是否为空
 {
      return s->base==s->top;
 }

 int IsFull(seqstack *s)//判断栈是否已满
 {
      return s->top-s->base==STACK_SIZE-1;
 }

 void Push(seqstack *s,char ch)//进栈
 {
      if(IsFull(s))
      {
          printf("overflow\n!");
          exit(1);
      }
      else
          *s->top++=ch;
 }

 char Pop(seqstack *s)//出栈
 {
      if(IsEmpty(s))
      {
          printf("栈空\n");
          exit(1);
      }
      return *--s->top;
 }

 char Top(seqstack *s)// 取栈顶元素
{
      if(IsEmpty(s))
      {
          printf("栈空\n");
          exit(1);
      }
      return *(s->top-1);
 }

 void TenDownConversion(long a,int b)//函数功能:1~16进制的转换
 {
      int i;
      seqstack s;
     init(&s);
     while(a)//当a本身即为0时没有输出
     {
          Push(&s,a%b);
         a=a/b;
      }
           printf("转换成%d进制的结果的: ",b);
      while(!IsEmpty(&s))
     {
          i=Pop(&s);
   
         printf("%d",i);
        
     }
      free(s.base);//释放堆,添加
      printf("\n");
}


 /*void TenUpConversion(long n,int N)//函数功能:11~16进制的转换
{
    int e;
    seqstack s;init(&s);
    while(n)
    {
        Push(&s,n%N);
        n=n/N;
    }printf("转换成%d进制的结果的: ",N);
    while(!IsEmpty(&s))
    {
        e=Pop(&s);
        switch(e)//选择代换
        {
            case 0:printf("0");break;
            case 1:printf("1");break;
            case 2:printf("2");break;
            case 3:printf("3");break;
            case 4:printf("4");break;
            case 5:printf("5");break;
            case 6:printf("6");break;
            case 7:printf("7");break;
            case 8:printf("8");break;
            case 9:printf("9");break;
            case 10:printf("A");break;
            case 11:printf("B");break;
             case 12:printf("C");break;
            case 13:printf("D");break;
            case 14:printf("E");break;
            case 15:printf("F");break;
            default :printf("%d",e);break;
        }
    }printf("\n");
}*/

void main()
{
    long n; int N; long t;
    char kb=" ",ch;
    printf("说明:\n此程序的主要功能是:将一个十进制数转换成N进制数(0<N<=16)\n输入“#”键退出程序\n请注意输入数据的正确性\n");
    while(kb!='#')
    {
            printf("请输入十进制数n:");
            //scanf("%ld",&n);
            while((scanf("%ld",&n))!=1)//剔除错误输入功能没实现~~~等待大神完善·····
            {
                while((ch = getchar())!='\n' )
                getchar(ch);
                printf("输入错误,请重新输入一个正确的十进制整数,如10或者50\n请重新输入:");
            
                scanf("ld",&n);
            }
         
            printf("请输入需要转换成的进制N:\n");
            scanf("%d",&N);
            while ((N>=1&&N<=16)!=1)
            {
                getchar();
                printf("输入错误,请重新输入一个1~16的正整数:");
                 scanf("%d",&N);
            }
            
                TenDownConversion(n,N);
            /*else
                TenUpConversion(n,N);*/
            getchar();



           
             //t=n+N;此是测试····
            //printf("此是测试····经过和%ld\n",t);
        
            printf("是否继续转换?(输入“#”结束程序)");
            //kb=getch();
            
        
               scanf("%c",&kb);
    }
   
}
/*说明,此代码在输入n检测时,输入小数、负数直接错误;输入字母可以检测到,但是要按两次回车,蛋疼;输入字符正确*/

2014-02-21 21:35
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
对比一下  自己改一下

一个进制转化写那么复杂  你的代码是拼的吧

DO IT YOURSELF !
2014-02-22 06:56
快速回复:求助大神,为什么总是要输入两次n
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036254 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved