【问题标题】:C printing second value of string for both stringsC为两个字符串打印字符串的第二个值
【发布时间】:2015-04-28 02:30:08
【问题描述】:
for(j=0;j<nodes;j++){

        //changes source node from number to charcter           
        if(j==0){char nod[1] = "A";}
        else if(j==1){char nod[1] = "B";}
        else if(j==2){char nod[1] = "C";}
        else if(j==3){char nod[1] = "D";}
        else if(j==4){char nod[1] = "E";};

        int d = rt[i].from[j]+1;

        if(d==1){char nod[1] = "A";}
        else if(d==2){char next[1] = "B";}
        else if(d==3){char next[1] = "C";}
        else if(d==4){char next[1] = "D";}
        else if(d==5){char next[1] = "E";};

        printf("\t\n %s %d %s ",nod,rt[i].dist[j],next);

}

这对两个字符串都打印出相同的内容,然后打印出下一个并且根本不打印出点头。 IE。

For router A
A 0  A  
B 2  B  
C 3  C  
C 5  C  
B 5  B 

什么时候应该是这样的:

For router A
A 2  A  
B 0  B  
C 4  C  
D 4  C  
E 3  B 

感谢任何帮助,谢谢。

【问题讨论】:

  • nodnext 似乎超出范围?
  • 一行if 并没有让我注意到这一点,但确实如此。
  • 是时候在编程上下文中搜索“范围”这个词了 :)

标签: c string printf


【解决方案1】:

您在每个 if 块中重新声明 nodnext,当块结束时,它们超出范围。

因此,您打印的不是修改后的nodnext,而是在此for 循环开始之前声明的。

您不需要nodnext 只是为了打印值,您可以直接打印它们,或者,

for(j=0;j<nodes;j++)
{
    int d = rt[i].from[j] + 1;
    printf("\t%c %d %c\n", 'A' + d - 1, rt[i].dist[j], 'A' + d - 1);
}

会给你想要的输出。

【讨论】:

  • 如果我取出 d 的所有声明并用 rt[i].from[j]+1 替换 next 然后 nod 可以正常工作,但是我留下了数字而不是 rt 的字母[i].from[j]+1
猜你喜欢
  • 2020-02-01
  • 2016-03-29
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
相关资源
最近更新 更多