救命! 这个代码问题出在哪?
int main() {
int x=0;
int i;
int n[100];
char str[100]={'\0'};
scanf("%s", str);
fflush(stdin);
for(i=0;i<sizeof(str);i++)
{
if(str[i]-'0'>=0)
{
n[i]=str[i]-'0';
x+=n[i];
printf("%d\n",n[i]);
}else{
break;
}
}
char *c[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int f=x;
int bit=f%10;
int ten=(f/10)%10;
int hun=f/100;
printf("%s %s %s",c[hun],c[ten],c[bit]);
return 0;
}
修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <string.h> // 修改
int main()
{
int x=0;
int i;
int n[6] = {0}; // n[100] 修改
char str[102]={0}; //str[100] 修改
scanf("%s", str);
for(i=0;i<strlen(str);i++) //for(i=0;i<sizeof(str);i++) 修改
{
x+=str[i]-'0';
//if(str[i]-'0'>=0) 修改
//{
// n[i]=str[i]-'0';
// x+=n[i];
// printf("%d\n",n[i]);
//}else{
// break;
//}
}
char *c[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
i = 0;
if (x == 0) n[i++] = 0; // 修改
while (x != 0){ // 修改
n[i++] = x % 10; // 修改
x /= 10; // 修改
}
for (i--;i >= 0; i--) // 修改
printf(i ? "%s " : "%s",c[n[i]]); // 修改
//int f=x; 修改
//int bit=f%10;
//int ten=(f/10)%10;
//int hun=f/100;
return 0;
}
str[100]放不下10的100次方呢
【以下回答由 GPT 生成】
这段代码的问题在于使用了fflush(stdin)
来清空输入缓冲区。然而,fflush(stdin)
的行为是未定义的,不能正确清空输入缓冲区。这可能导致后续的输入操作出错。
为了解决这个问题,可以使用getchar()
循环读取输入缓冲区中的字符,直到遇到换行符为止,以清空输入缓冲区。以下是修改后的代码:
#include <stdio.h>
int main() {
int x = 0;
int i;
int n[100];
char str[100] = {'\0'};
scanf("%s", str);
getchar(); // 读取并丢弃输入缓冲区中的换行符
for(i=0; i<sizeof(str); i++)
{
if(str[i]-'0'>=0)
{
n[i] = str[i]-'0';
x += n[i];
printf("%d\n",n[i]);
}
else{
break;
}
}
char *c[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int f = x;
int bit = f%10;
int ten = (f/10)%10;
int hun = f/100;
printf("%s %s %s",c[hun],c[ten],c[bit]);
return 0;
}
通过修改fflush(stdin)
为getchar()
,代码可以正确地读取输入并清空输入缓冲区。
【相关推荐】