使用if语句时出错

时间:2015-05-28 18:04:28

标签: c++

#include "stdafx.h"
#include <iostream> 


bool primeNumber( int x )
{
    return (x==2,3,5,7) ;
}

int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std ;

    cout << "ENTER ONE DIGIT NUMBER - " ;
    int x ;
    cin >> x ;

    if ( primeNumber )
        cout << x  << " IS A PRIME NUMBER " <<endl;
    else
        cout << x << " IS NOT A PRIME NUMBER " << endl;
    return 0;
}

请帮助我..每次都是相同的,即&#39; x&#39;是一个素数.. 也建议改变......我只是一个初学者,所以也建议改进我的代码的方法

3 个答案:

答案 0 :(得分:6)

试试这个:

if ( primeNumber(x) )

而不是

if ( primeNumber )

并改变你的退货声明,如

return x == 2 || x == 3 || x == 5 || x == 7;

如果你想比较价值。

答案 1 :(得分:6)

return (x==2,3,5,7)

这不符合您的想法,逗号分隔的表达式返回列表中最后一个表达式的值,您primeNumber方法基本上总是返回7,其值为{{1 }}

您必须将值与每个值进行比较,例如:

true

此外,正如Rahul所指出的那样,你不是在调用方法,而只是将指向函数return x == 2 || x == 3 || x == 5 || x == 7; 的指针与0不同,这是一个简单的primeNumber

答案 2 :(得分:3)

此函数始终返回bool primeNumber( int x ) { return (x==2,3,5,7) ; }

bool primeNumber( int x )
{
    return ( x == 2 || x == 3 || x == 5 || x == 7 );
}

因为在return语句中使用了逗号运算符,其值为7,与0不同。

我认为你的意思是以下

if ( primeNumber )

if语句中的条件

primeNumber

也总是为true,因为if ( primeNumber( x ) ) 是一个与0不同的有效函数指针。

你必须写

if ( primeNumber( x % 10 ) )

至于我,那么我会写下面的方式

bool primeNumber( unsigned int x )
{
    bool prime = ( x == 2 ) || ( x % 2 != 0 && x != 1 );

    for ( unsigned int i = 3; prime && i * i <= x; i += 2 )
    {
        prime = x % i != 0;
    }

    return prime;
}

因为没有什么可以阻止用户输入包含多个数字的数字。

该功能可以通过以下方式定义

public abstract class BaseActivity extends AppCompatActivity {

private Toolbar mToolbar;
private FrameLayout mContentFrame;
private ActivityFragment mActivityFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(setLayout());
    initViews();
    initToolbar();
}

protected int setLayout() {
    return R.layout.activity_base;
}

//I want to override this and provide a different toolbar layout!
protected int setToolbarLayout(){
    return R.layout.toolbar;
}

protected void initViews() {
    mToolbar = (Toolbar) findViewById(R.id.toolbar);
    mContentFrame = (FrameLayout) findViewById(R.id.contentFrame);
}

private void initToolbar() {
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        mToolbar.setElevation(10f);
    }
}

protected void setContentFragment(ActivityFragment fragment) {
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(getContentFrame().getId(), fragment).commit();
    supportInvalidateOptionsMenu();
    this.mActivityFragment = fragment;
    setTitle(fragment.getTitle(this));
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

public Toolbar getToolbar() {
    return mToolbar;
}

public FrameLayout getContentFrame() {
    return mContentFrame;
}

public ActivityFragment getActivityFragment() {
    return mActivityFragment;
}