为什么下面的代码给出了第一个移动号码。不论名字

时间:2015-06-10 11:30:54

标签: c string switch-statement comparison

请解释为什么以下代码给出第一个手机号码。无论输入的名称如何:

#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
           }
        }
    }  
}

4 个答案:

答案 0 :(得分:3)

您无法使用=(或者甚至是==)运营商比较 字符串。您需要使用strcmp()

在您的代码中,mobileno()函数内部

if( s="katrina" )

本质上是尝试字符串文字"katrina"的基地址分配给s。它远不及比较

那就是说,

  1. 永远不要使用gets(),它会遇到缓冲区溢出问题。使用更安全的替代方法fgets()
  2. 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'表示检查ab是否具有相同的值。

字符数组比较:改为使用strcmp():

 if( strcmp(s,"katrina")==0 )