我有以下代码,但没有给出我认为会产生的结果。当我运行程序时,在输入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 >
}
有谁能告诉我我做错了什么?
答案 0 :(得分:0)
你这里有一个错字
num2 + num3 + num4 + num5 + num6, num7 + num8 + num9 + num10;
/* ^ should be a `+' */
主要由
引起未启用编译器警告。
此语法有效,但它具有特殊含义,总和的第一部分将被丢弃,仅从num7
开始,并且其结果存储在total_sum
。
编程风格不好。
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;
});