C语言写出这个数(相关搜索:c语言)

救命! 这个代码问题出在哪?

img

img


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(),代码可以正确地读取输入并清空输入缓冲区。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^