0

以下のプログラムの出力は6. 理由がわかりません。手でなぞると5.

#include<stdio.h>
#include<conio.h>

main()
{
    int i,count=0; 
    char *p1="abcdefghij"; 
    char *p2="alcmenfoip"; 

    for(i=0;i<=strlen(p1);i++) { 
        if(*p1++ == *p2++) 
            count+=5; 
        else 
            count-=3; 
    } 
    printf("count=%d",count); 
}
4

3 に答える 3

9

if(*p1++ == *p2++)p1p2文字の両方を読んでいます。文字が同じ場合はcount5 増加し、それ以外の場合は 3 減少します。しかし、注意を払わなかったもう 1 つのことがあります。変化するstrlen(p1)ため、繰り返しごとに常に異なりますp1。したがって、反復ごとに、その値も確認する必要があります。

p1   p2 count   i   strlen (before entering into the loop body)
a    a   5      0   10
b    l   2      1   9
c    c   7      2   8
d    m   4      3   7
e    e   9      4   6
f    n   6      5   5  <- No more - this is the last one
于 2013-09-17T13:37:16.410 に答える
2

ここでの秘訣は、strlen(p1)反復ごとに変更することです。だからループ条件は行く

0 <= 10  +5
1 <= 9   -3
2 <= 8   +5 
3 <= 7   -3
4 <= 6   +5
5 <= 5   -3

したがって、等しい文字はace、 上記の +5 として示されています。合計は 6 です。

于 2013-09-17T13:37:17.843 に答える
0

i>strlen(p1)するたびに p1 を変更しているため、プログラムは次の場合に停止します*p1++

条件を計算すると、strlen は las char からサイズを返します。

最初(ループの前)に変数に値を格納すると、機能するはずです。

とにかく、ポインター演算は避けてください...

于 2013-09-17T13:37:06.933 に答える