c 问题 if和else if

来源:百度知道 编辑:UC知道 时间:2024/06/09 20:20:54
#include<iostream>
using namespace std;

struct node
{
int data;
node *next;
};

int main()
{
node *h = 0, *p;
char s[100];
int c, n, i;
bool f = false;
cin.getline(s, 100);
for(c = n = i = 0; s[i]; ++i)
{
if('0' <= s[i] && s[i] <= '9')
{
n = n * 10 + s[i] - '0';
f = true;
}
else if(f) //问题:为什么吧else if(f)该成if(f)就不一样了!!??
{
if(h == 0)
h = p = new node;
else
{
p->next = new node;
p = p->next;
}
p->data = n;
n = 0;
f = false;
++c;
}
}
if(f)
{
if(h == 0)
h = p = new node;
else
{
p->next = new node;
p = p->next;
}
p->data = n;
++c;
}

p->next = 0;

在if……else if语句中,如果第一个if条件成立,则执行之,后面的elseif语句不执行。
如果把else if 改为if,则无论第一个if执行与否,第二个if都要进行判断是否执行。

在你的代码中,本来if('0' <= s[i] && s[i] <= '9')成立的话,则if(f)肯定不执行,当if('0' <= s[i] && s[i] <= '9')不成立时,才看if(f)是否成立。
改为if(f)后,无论if('0' <= s[i] && s[i] <= '9')是否成立,if(f)都要进行判断是否成立。

所以,有可能造成两个if都执行,而原程序中,if('0' <= s[i] && s[i] <= '9')和else if(f),只能有一个执行。

if('0' <= s[i] && s[i] <= '9')
{
语句1;
}
else if(f) //问题:为什么吧else if(f)该成if(f)就不一样了!!??
{
语句2;
}

这样写就是先判断if('0' <= s[i] && s[i] <= '9'),如果条件为真,则执行语句1,也不在判断else if(f),如果前面的条件为假才判断else if(f),

而改成

if('0' <= s[i] && s[i] <= '9')
{
语句1;
}
if(f) //问题:为什么吧else if(f)该成if(f)就不一样了!!??
{
语句2;
}
这样