C程序不显示预期结果

时间:2015-10-01 00:32:21

标签: c

我有以下代码,但没有给出我认为会产生的结果。当我运行程序时,在输入SIN编号后它不会显示任何内容: 我希望程序告诉我输入的SIN编号是有效的,但它只是退出而没有显示结果!

#include <stdio.h>
int main(void) {

    int num1,num2,num3,num4,num5,num6,num7,num8,num9,num10,total_sum,num11,sin_num[9];
    int digit1,digit2,digit3,digit4,digit5,digit6,digit7,digit8,digit9,digit10,digit11,digit12,digit13;
    int digit14,num12,num13,num14;
    printf("SIN Validator \n");
    printf("============= \n");

    for(num1=0;num1<9;num1++) {
            printf("Enter your SIN one by one:");
            scanf("%d", &sin_num[num1]);
    }

    num2 = sin_num[0] * 1;
    num3 = sin_num[1] * 2;
    num4 = sin_num[2] * 1;
    num5 = sin_num[3] * 2;
    num6 = sin_num[4] * 1;
    num7 = sin_num[5] * 2;
    num8 = sin_num[6] * 1;
    num9 = sin_num[7] * 2;
    num10 = sin_num[8] * 1;

    total_sum = num2+num3+num4+num5+num6,num7+num8+num9+num10;
    digit13 = total_sum % 10;

    digit1 = num3 % 10;
    digit2 = num3 / 10;
    digit3 = digit1 + digit2;
    digit4 = num5 % 10;
    digit5 = num5 / 10;
    digit6 = digit4 + digit5;
    digit7 = num7 % 10;
    digit8 = num7 / 10;
    digit9 = digit7 + digit8;
    digit10 = num9 % 10;
    digit11 = num9 / 10;
    digit12 = digit10 + digit11;

    num11 = num2+digit3+num4+num5+num6+num7+num8+num9+num10;
    num12 = num2+digit3+num4+digit6+num6+num7+num8+num9+num10;
if (num3 >= 10 && num11 % 10 == 0 && num5 < 10 && num7 < 10 && num9 < 10) {
            printf("This is a valid SIN number");
    }

    if (num3 >= 10 && num5 >= 10 && num7 < 10 && num9 < 10 && num11 % 10 == 0 && num12 % 10) {
            printf("This is a valid SIN number");
    }

    //else if(num5 >

}

有谁能告诉我我做错了什么?

3 个答案:

答案 0 :(得分:0)

你这里有一个错字

num2 + num3 + num4 + num5 + num6, num7 + num8 + num9 + num10;
                           /*   ^ should be a `+' */

主要由

引起
  1. 未启用编译器警告。

    此语法有效,但它具有特殊含义,总和的第一部分将被丢弃,仅从num7开始,并且其结果存储在total_sum

  2. 编程风格不好。

    1. 运营商周围缺少空白。
    2. 声明9个int变量似乎不是一个好的解决方案。

答案 1 :(得分:0)

试试这个: 从第num10 = sin_num[8] * 1;行开始,将代码替换为:

num3 = num3%10 + num3/10;
num5 = num5%10 + num5/10;
num7 = num7%10 + num7/10;
num9 = num9%10 + num9/10;
total_sum = num2+num3+num4+num5+num6+num7+num8+num9+num10; // your old total_sum line
if (total_sum%10==0) printf("This is a valid SIN number");
} /*close bracket for main

虽然上面的内容可以修复您的程序,但您的整个程序可以重写为非常简单的其他内容。 你的代码太复杂了。 我猜你不知道你可以在你的代码中更改像num9 = num9%10 + num9/10;这样的变量的值。

答案 2 :(得分:0)

请随意使用数组,最好根据意图进行编号。所以num2是1.元素(#0)的不好选择。 如果保持在10以下,则检查加倍值,然后检查校正后的和是否可被10整除。正如iharob指出:sum在代码中有+而不是&& num12 % 10。我假设你的最后一个条件0 == ( num12 % 10 )const uint ND = 9; /* .. */ for( int idx = 0; idx < ND ); ++idx ) { printf( "Enter your SIN one by one (#%d): ", idx ); scanf( "%d", &num[idx]); if( ( num[idx] < 0 ) || ( 10 <= num[idx] ) ) { valid = 0; idx = ND; } else { if( 1 & idx ) { num[idx] <<= 1; } // double every second if( 10 <= num[idx] ) { num[idx] -= ( 10 - 1 ) * ( num[idx] / 10 ); } sum += num[idx]; } } if( valid && ( 0 != ( sum % 10 ) ) ) { printf( "This is a valid SIN number\n" ); }

更新的 我检查了SIN计算,你的方法远非如此。这是一个:

int num[9];
int valid = 1;
int sum   = 0;
printf( "SIN Validator \n" );
printf( "============= \n" );
for( int idx = 0; idx < sizeof( num ) / sizeof( sin_num[0] ); ++idx )
{
    printf( "Enter your SIN one by one (#%d): ", idx );
    scanf( "%d", &num[idx]);
    if( 1 & idx ) { num[idx] <<= 1; } // double every second
    sum += num[idx];
}
if( ( num[1] < 10 )
 || ( num[5] < 10 )
 || ( num[7] < 10 ) ) { valid = 0; }

if( valid && ( 0 != ( sum % 10 ) ) ) { valid = 0; }

if( valid && ( 10 <= num[3] ) )
{
    sum -= ( 10 - 1 ) * ( num[3] / 10 );
    if( 0 != ( sum % 10 ) ) { valid = 0; }
}

if( valid ) { printf( "This is a valid SIN number\n" ); }

重构后的代码,不知道什么是SIN:

$("#contactForm").submit(function(ev){
ev.preventDefault();
});
$("#sbm").on("click", function(){
 var bootstrapValidator = $("#contactForm").data('bootstrapValidator');
 bootstrapValidator.validate();

if(bootstrapValidator.isValid())
    //setTimeout(function(){$("#success").show();}, 300);
    error = true;
    $("#contactForm").submit();
else return;
});