请解释为什么以下代码给出第一个手机号码。无论输入的名称如何:
#include <iostream>
#include <cstdlib>
#include <ctime>
using std::cout;
using std::cin;
using std::endl;
int const temp = 10000;
void bubbleSort ( int array [ temp ] );
void radixSort ( int * array, int arraySize );
void display ( int btime);
int main ( )
{
int A1;
int array [ temp ];
char a = '\0';
cout << "\nWould You Like To Perform Bubble and Radix Test? (y/n): ";
cin >> a;
while ( a == 'y' || a == 'Y' )
{
srand ( ( unsigned ) time ( 0 ) );
for ( size_t i = 0; i < temp; i++ )
{
A1 = ( rand ( ) % temp ) + 1 ;
array [ i ] = A1;
bubbleSort ( array );
}
}
while ( a == 'n' || a == 'N' )
{
break;
}
return 0;
}
void bubbleSort ( int array [ temp ] )
{
for ( int i = 0; i < temp; i++ )
{
for ( int j = 0; j < temp - 1; j++ )
{
if ( array [ j ] > array [ j + 1 ] )
{
int temp = array [ j ];
array [ j ] = array [ j + 1 ];
array [ j + 1 ] = temp;
//Test: to see if its working properly.
cout << array [ j + 1 ] << endl; //idk if this should be placed here
}
}
}
}
答案 0 :(得分:3)
您无法使用=
(或者甚至是==
)运营商比较 字符串。您需要使用strcmp()
。
在您的代码中,mobileno()
函数内部
if( s="katrina" )
本质上是尝试将字符串文字"katrina"
的基地址分配给s
。它远不及比较。
那就是说,
gets()
,它会遇到缓冲区溢出问题。使用更安全的替代方法fgets()
main()
的推荐签名为int main(void)
答案 1 :(得分:1)
此代码
if( s="katrina" )
将“katrina”分配给s,结果不为0,即“true”。要进行比较,请改用strcmp。虽然您可以将值与“==”进行比较,但不要将其用于字符串,因为它只会比较地址,而且两个相同的字符串仍然可以具有不同的地址。
答案 2 :(得分:1)
在此功能中
=
使用了赋值运算符 if( s="katrina" )
,它在if条件中分配字符串文字的第一个字符的地址。例如在thsi语句中
strcmp
指针s被分配给字符串文字的第一个字符的地址&#34; katrina&#34;这显然不等于NULL。所以条件总是如此。:)
如果要与字符串进行比较,则应使用标题<string.h>
中声明的标准C函数#include <string.h>
//...
int mobileno( const char *s )
{
const char *name[] =
{
"aishwarya", "katrina", "shahid", "ranbir", "sharukh",
"hema", "amitabh", "shashnk", "raj"
};
const size_t N = sizeof( name ) / sizeof( *name );
size_t i = 0;
while ( i < N && strcmp( s, name[i] ) != 0 ) i++;
return i;
}
按以下方式重写该功能
gets
考虑到函数fgets
不再是C标准函数,因为它不安全。请改为使用函数new
。
答案 3 :(得分:0)
if
条件中的两个问题:
if( s="katrina" )
分配而非平等:
a=b
表示将b
的值分配给a
。
a==b'
表示检查a
和b
是否具有相同的值。
字符数组比较:改为使用strcmp():
if( strcmp(s,"katrina")==0 )