顺便问一下,return 1是直接跳出所有循环还是只跳出当前的循环?

I have not failed completely
2012-10-21 09:44

2012-10-21 11:30

2012-10-21 13:53

2012-10-21 15:37
程序代码:#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
int main(void)
{
char A[100] = {0};
char B[100] = {0};//用于存放A中去掉符号之后的所有小写字母和数字
int j = 0;//用于给B赋值
int i;
int PQ = 0;
bool OPQ = true;
printf("请输入一段文字:\n");
fgets(A,sizeof(A),stdin);
for(i=0; i<(strlen(A)); i++)
{
if( isalnum(A[i]) != 0)
{
B[j] = tolower(A[i]);//用B来存储A中的小写字符和数字
j++;
}
}
while(PQ < ( strlen(B) ))//判定B是否满足回文的条件
{
if( B[PQ] != B[ (strlen(B) - 1 ) - PQ])
{
OPQ = false;
break;//跳出while循环
}
PQ++;
}
if(OPQ == true)
printf("\n这是一个回文\n");
else
printf("\n这不是一个回文\n");
return 0;
}

2012-10-21 15:48

2012-10-21 16:19
程序代码:#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
int main(void)
{
char A[100]= {0};
int i,PQ=0;
bool OPQ=true;
printf("请输入一段文字:\n");
fgets(A,sizeof(A),stdin);
for(i=0; i<(strlen(A)); i++)
{
if(isalnum(A[i])==0)//这里将所有非字母和数字的的字符置为空格了 ,比如i'm变成了i m
A[i]=' ';
else
A[i]=tolower(A[i]);//把所有的字母都改成了小写
}
while(PQ<(strlen(A)))
{
if(A[PQ]==' ')//对所有的非空格字符进行判定
{
PQ++;
continue;
}
if(A[PQ]!=A[i-PQ])
/*错误!! 将第PQ个字符(该字符非空格),与第i-PQ个字符比较,
但实际上因为之前的for循环已结束,所以此时的i的值为A的长度,即strlen(A)。
若字符串长度为5的话,就是判定A[0]==A[5],但是A[5]是没有意义的。
再者,之前修改成空格的字符也算在内的。所以这里的A[PQ]可能会与空格字符想比较。
所以此方法无法判定字符串是否回文。
*/{
printf("\n这不是一个回文\n");
OPQ=false;
return 1;//这里直接结束了整个main函数。相当于程序退出。
}
PQ++;
}
if(OPQ==true)
printf("\n这是一个回文\n");
return 0;
2012-10-21 16:33


2012-10-21 16:57
2012-10-21 17:10

2012-10-21 17:52