消息关闭
    暂无新消息!
#include<stdio.h>
#include<math.h>
void main()
{
int n, k, i, n1;
scanf_s("%d", &n);
n1 = n;
for (i = 1; n1 > 0; ++i)
n1 = n1 / 10;
for (; n>0 && i>=0; --i)
{
k = n / pow(10,(i-1));
switch (k)
{
case 0:printf(" zone"); break;
case 1:printf(" one"); break;
case 2:printf(" two"); break;
case 3:printf(" three"); break;
case 4:printf(" four"); break;
case 5:printf(" five"); break;
case 6:printf(" six"); break;
case 7:printf(" seven"); break;
case 8:printf(" eight"); break;
case 9:printf(" nine"); break;
}
n = n % (10 ^ (i - 1));
}
printf("\n");
}
//这是我的代码,为什么不对啊

27个回答

︿ 3
你的输入函数你写成了  scanf_s();    正确的输入函数应该是  scanf("%d",&n);

︿ 2
^是 Basic ,Matlab 等软件(语言)才有的表示乘幂的符号,
C,C++这个符号表示位操作异或(xor),不是乘幂(pow)。
︿ 1
再来个基于20楼回复的,空格或者制表符经过剪裁后输出更美观的版本:


while (1)
{
MAIN_REENTER:
printf("Please input a plus integer number: ");
fflush(NULL);
i = 0;
tag = 0;

while (1)
{
tmpChar = getchar();
while (0 == i && (' ' == tmpChar || '\t' == tmpChar))
{
tmpChar = getchar();
}
if (isdigit(tmpChar) || ' ' == tmpChar || '\t' == tmpChar)
{
if (i == strLen)
{
if (NULL == (charBuf = (char *) realloc(charBuf, (strLen *= 2) + 1)))
{
printf("Realloc memory and double size for charBuf failed!\n");
_exit(1);
}
memset(charBuf+i, '\0', strLen/2 + 1);
}
switch(tmpChar)
{
case  '\t': tmpChar = ' ';
case  ' ' : tag ++;    break;
default   : tag = 0;   break;
}
if (tag > 1) continue;

charBuf[i++] = tmpChar;
continue;
}
if (isenterkey(tmpChar))
{
strCount = i;
break;
}
printf("Input Error! Try again.\n");
fflush(NULL);
while (!isenterkey(tmpChar = getchar())) ;
memset(charBuf, '\0', strLen + 1);
goto MAIN_REENTER;
}
break;
}
for (i=0; i<strCount; i++)
{
if (0 == (i + 1) % 15)
{
putchar('\n');
}

printf(" %s", (' ' == charBuf[i]) ? "\n" : DescStr[charBuf[i] - '0']);
}
︿ 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
  char *p[10]={"zero","one","two","three","four","five","six","seven","eight","nine","ten"};
      long n,m;
      int i,j;
      scanf("%ld",&n);
      for(j=0;n>=0;j++)
      {
        m=n;
        for(i=0;m>=10;i++)
           {
            m=m/10;
           }
       if(n>=10)
        {
          n=n-m*(pow(10,i));
          printf("%s\n",p[m]);   
           if(n<pow(10,i-1)&&n>0)
             {
              printf("%s\n",p[0]);
             }
         } 
       if(n<10&&n>=0)
          {
           printf("%s\n",p[n]);
           break;
          }
      }
system("pause");
return 0;
}
请帮帮忙,看看错在那里,新手刚学1周。谢谢
︿ 1
//输入一个非负整数,依次输出它的每位数对应的的英文单词
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[20];
char t[20];
int i;
char c;
char *en[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("输入一个非负整数:");fflush(stdout);
        rewind(stdin);
        fgets(s,20,stdin);
        if (strlen(s)>10) {
            printf("输入太长(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c && i>=0) {
                sprintf(t,"%d\n",i);
                if (0==strcmp(s,t)) {
                    printf("%s",en[t[0]-'0']);
                    for (i=1;t[i]!='\n';i++) printf(" %s",en[t[i]-'0']);
                    printf("\n");
                    break;
                }
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" 不是非负整数!\n",s);
    }
    return 0;
}
//输入一个非负整数:abc
//"abc" 不是非负整数!
//输入一个非负整数:哈
//"哈" 不是非负整数!
//输入一个非负整数:10a
//"10a" 不是非负整数!
//输入一个非负整数:-1
//"-1" 不是非负整数!
//输入一个非负整数:001
//"001" 不是非负整数!
//输入一个非负整数:1234567890
//输入太长(>9)!
//输入一个非负整数:123456789
//one two three four five six seven eight nine
//
︿ 1
来个人性化版本,这个不限于输入一个正整数,你可以输入任意多正整数:


while (1)
{
MAIN_REENTER:
printf("Please input a plus integer number: ");
fflush(NULL);
i = 0;

while (1)
{
tmpChar = getchar();
while (0 == i && (' ' == tmpChar || '\t' == tmpChar))
{
tmpChar = getchar();
}
if (isdigit(tmpChar) || ' ' == tmpChar || '\t' == tmpChar)
{
if (i == strLen)
{
if (NULL == (charBuf = (char *) realloc(charBuf, (strLen *= 2) + 1)))
{
printf("Realloc memory and double size for charBuf failed!\n");
_exit(1);
}
memset(charBuf+i, '\0', strLen/2 + 1);
}
if ('\t' == tmpChar)
{
tmpChar = ' ';
}
charBuf[i++] = tmpChar;
continue;
}
if (isenterkey(tmpChar))
{
strCount = i;
break;
}
printf("Input Error! Try again.\n");
fflush(NULL);
while (!isenterkey(tmpChar = getchar())) ;
memset(charBuf, '\0', strLen + 1);
goto MAIN_REENTER;
}
break;
}
for (i=0; i<strCount; i++)
{
if (0 == (i + 1) % 15)
{
putchar('\n');
}

printf(" %s", (' ' == charBuf[i]) ? "\n" : DescStr[charBuf[i] - '0']);
}
︿ 1
在现实世界中,除时间和空间可能是无限的以外,其它任何事物都是有限的。
︿ 1
再来个加强版:


while (1)
{
tmpChar = getchar();
while (0 == i && (' ' == tmpChar || '\t' == tmpChar))
{
tmpChar = getchar();
}
if (isdigit(tmpChar))
{
if (i == strLen)
{
if (NULL == (charBuf = (char *) realloc(charBuf, (strLen *= 2) + 1)))
{
printf("Realloc memory and double size for charBuf failed!\n");
_exit(1);
}
memset(charBuf+i, '\0', strLen/2 + 1);
}
charBuf[i++] = tmpChar;
continue;
}
if (' ' == tmpChar || '\t' == tmpChar)
{
wordCount++;
continue;
}
if (isenterkey(tmpChar))
{
strCount = i;
break;
}
printf("Input Error! Try again.\n");
fflush(NULL);
while (!isenterkey(tmpChar = getchar())) ;
memset(charBuf, '\0', strLen + 1);
goto MAIN_REENTER;
}
︿ 1

小心驶得万年船!
//输入一个非负整数,依次输出它的每位数对应的的英文单词
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[20];
char t[20];
int i;
char c;
char *en[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("输入一个非负整数:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
        if (strlen(s)>10) {
            printf("输入太长(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c && i>=0) {
                sprintf(t,"%d\n",i);
                if (0==strcmp(s,t)) {
                    printf("%s",en[t[0]-'0']);
                    for (i=1;t[i]!='\n';i++) printf(" %s",en[t[i]-'0']);
                    printf("\n");
                    break;
                }
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" 不是非负正整数!\n",s);
    }
    return 0;
}
//输入一个非负整数:abc
//"abc" 不是非负正整数!
//输入一个非负整数:哈
//"哈" 不是非负正整数!
//输入一个非负整数:10a
//"10a" 不是非负正整数!
//输入一个非负整数:-1
//"-1" 不是非负正整数!
//输入一个非负整数:001
//"001" 不是非负正整数!
//输入一个非负整数:1234567890
//输入太长(>9)!
//输入一个非负整数:123456789
//one two three four five six seven eight nine
//
︿ 0
rewind(stdin);//清除输入缓冲区中的剩余内容


说linux下不行?
说“跨平台一定比不跨平台好”就和说“双性恋一定比异性恋好”一样!
︿ 0
“多一少一”问题占程序员常犯错误的10%以上!
避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为
x、x-1、x+1中的哪个?
<、<=、==、>、>=中的哪个?
︿ 0
n = n % (10 ^ (i - 1));

改成:


int tmp = pow(10,(i-1));
n = n % tmp;


另外0的英文拼错了吧
︿ 0
楼主,我也给你发个我的原创,可以随便你输入任何字符:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define  INITSIZE  4
#define  DIGITCNT  10
#define  isenterkey(Char)  ((Char) == '\n')

const static char  *DescStr[DIGITCNT] = {
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"
};

int main(void)
{
char  tmpChar,  *charBuf = NULL;
unsigned int  i,  strLen = INITSIZE,  strCount = 0;

if (NULL == (charBuf = (char *) malloc ((strLen + 1) * sizeof(char))))
{
printf("Allocate Memory for charBuf error!\n");
_exit(1);
}
memset(charBuf, '\0', strLen + 1);

while (1)
{
MAIN_REENTER:
printf("Please input a plus integer number: ");
fflush(NULL);
i = 0;

while (1)
{
tmpChar = getchar();
if (isdigit(tmpChar))
{
if (i == strLen)
{
if (NULL == (charBuf = (char *) realloc(charBuf, (strLen *= 2) + 1)))
{
printf("Realloc memory and double size for charBuf failed!\n");
_exit(1);
}
memset(charBuf+i, '\0', strLen/2);
}
charBuf[i++] = tmpChar;
continue;
}
if (isenterkey(tmpChar))
{
strCount = i;
break;
}
printf("Input Error! Try again.\n");
memset(charBuf, '\0', strLen + 1);
goto MAIN_REENTER;
}
break;
}
for (i=0; i<strCount; i++)
{
if (0 == (i + 1) % 15)
{
putchar('\n');
}

printf(" %s", DescStr[charBuf[i] - '0']);
}
putchar('\n');

return 0;
}

︿ 0
^是异或

    int e=log10((float)n);
int mod=1;
while(e--) mod*=10;
while(n){
    k = n / mod;
    n %=mod;
    mod/=10;
    printf("%s", name[k];
 }