C语言if语句:编写循环以获得更优雅的解决方案?

时间:2015-01-22 13:02:29

标签: loops

我想知道是否有人能够提出一个否定使用多个if语句的解决方案。所以我的请求很清楚,已经提供了两组代码。第一组代码是工作代码,第二组代码是尝试编写一个满足优雅解决方案目的的循环(即通过将工作答案中使用的模式表示为一般算法)。 / p>

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

int main()    
{
    char str[10] = "copy000000";
    int i = 9;
    int a,b,c;


    for (a = 0; a < 10; a++)  
    {        

    str[i]++;

    for (b = 0; b < 6; b++)
    {    
    if (str[5] == ':')
        {
        str[5] = '0';
        str[4]++;
        }

    if (str[6] == ':')
        {
        str[6] = '0';
        str[5]++;
        }

    if (str[7] == ':')
        {
        str[7] = '0';
        str[6]++;
        }

    if (str[8] == ':')
        {
        str[8] = '0';
        str[7]++;
        }

    if (str[9] == ':')
        {
        str[9] = '0';
        str[8]++;
        }
     }

    printf("string is: %s\n", str);    
    b = 0;           
    }     

return 0;
}

此代码生成以下形式的输出:

string is: copy000001
string is: copy000002
string is: copy000003
string is: copy000004
string is: copy000005
string is: copy000006
string is: copy000007
string is: copy000008
string is: copy000009
string is: copy000010
string is: copy000011
string is: copy000012
string is: copy000013

尝试解决方案以概括if循环的迭代方式:

    for (c = 0; c < 5; c++)
    {
    if (str[d] == ':')
        {
        str[d] = '0';
        str[d-1]++;
        d++;
        }
    }

生成以下形式的输出:

string is: copy000001
string is: copy000002
string is: copy000003
string is: copy000004
string is: copy000005
string is: copy000006
string is: copy000007
string is: copy000008
string is: copy000009
string is: copy00000:
string is: copy00000;
string is: copy00000<
string is: copy00000=

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

只需使用b变量进行循环内部循环就可以了:

for(b=9; b > 4; b--){
    if(str[b]==':'){
        str[b] = '0';
        str[b-1]++;
    }
}

您只需将数字从最后一位数字增加到第一位。

如果您只需要打印,请考虑将数字保留为整数或长整数,并使用printf%d选项进行打印,如C/C++ reference

中所述 编辑:错过了分号