user-0 提问: 求一个程序，输入一个整数，依次输出它的每位数的英文单词

回复:
user: user-1
content: 你可以把他%10求余，算出的数存到数组里面（存的时候从后往前存），用一个for循环加指针进行switch判断输出对应的英文字母。

user: user-2
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-3
content: 引用 6 楼 zhao4zhong1 的回复: 小心驶得万年船！ //输入一个非负整数，依次输出它的每位数对应的的英文单词 #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 //  效率太低

user: user-4
content: http://blog.csdn.net/zhagoodwell/article/details/75008650

user: user-4
content: 我的代码健壮性应该更好--- # include <stdio.h>   # define N 30 //如果要录入X个字节则 N=X     int Getchar(char A[],int min,int max);//直到用户输入的字符串长度在[min,max]之间时 函数结束 返回字符串A的长度     int Check(char A[]);   int main(){         char A[N+1],B[][6]={"zero","one","two","three","four","five","six","seven","eight","nine"}; 	int L,i;  	while(1) 	{     do{     printf("输入数字(1--%d)位:\n",N);     L=Getchar(A,1,N);     }while(Check(A));     i=0;     while(i<L)       printf("%s ",B[A[i++]]);     printf("\n");     }     return 0;     }     int Check(char A[]){ 	int i=-1; 	while(A[++i]) 	  if(A[i]>'9'||A[i]<'0') 	    return printf("输入有误!请重新"); 	    else A[i]-='0'; 	return 0; } int Getchar(char *A,int min,int max)//长度在[min,max]  <闭区间>  之间时 函数结束 返回字符串A的长度         {             int B,C;        do{                 A[max]=B=C=0;             while((A[B++]=getchar())!='\n'&&B<max);             if(A[B-1]!='\n')while(getchar()!='\n'&&++C);                 else A[--B]=0;          if(C||B&&B<min)            printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max);             }while(C||B<min);             return B;       }

user: user-5
content: 你用二维数组不是更简单

user: user-6
content: 我是来学习学习的

user: user-2
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-7
content: #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周。谢谢

user: user-2
content: 在现实世界中，除时间和空间可能是无限的以外，其它任何事物都是有限的。

user: user-8
content: 你的输入函数你写成了  scanf_s();    正确的输入函数应该是  scanf("%d",&n);

user: user-9

user: user-2
content: //输入一个非负整数，依次输出它的每位数对应的的英文单词 #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 //

user: user-10
content: 引用 32 楼 zhao4zhong1 的回复://... echo 01|这个程序.exe

user: user-11
content: 不错。。。。

user: user-12
content: 引用 24 楼 zhao4zhong1 的回复:[quote=引用 23 楼 paschen 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:]  小心驶得万年船！ //输入一个非负整数，依次输出它的每位数对应的的英文单词 #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 //   非常严谨，不过如果输入的字符太长不是会溢出s吗[/quote] 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！ [/quote]  赵老师又忽悠我了

user: user-13
content: 经典！

user: user-2
content: rewind(stdin);//清除输入缓冲区中的剩余内容  说linux下不行？ 说“跨平台一定比不跨平台好”就和说“双性恋一定比异性恋好”一样！

user: user-2
content: 引用 25 楼 mewiteor 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:]  小心驶得万年船！ //... char s[20]; //...     setlocale(LC_ALL,"chs"); //...         fgets(s,80,stdin); //...  1：前面s[20],后面就fgets(s,80,stdin); 2：chs好像只在windows下有效吧，linux下好像没什么用吧。 3：最后没有清输入流，如果输入超过80字符，超过的部分会用于下一次输入。[/quote] 谢谢斧正！应该统一用20

user: user-10
content: 引用 6 楼 zhao4zhong1 的回复: 小心驶得万年船！ //... char s[20]; //...     setlocale(LC_ALL,"chs"); //...         fgets(s,80,stdin); //...  1：前面s[20],后面就fgets(s,80,stdin); 2：chs好像只在windows下有效吧，linux下好像没什么用吧。 3：最后没有清输入流，如果输入超过80字符，超过的部分会用于下一次输入。