Запрещен системный вызов: SYS_socketcall - ошибка при попытке проверить ISBN

0

Я пытаюсь проверить номера ISBN в C, но когда я запускаю программу, я получаю следующую ошибку: Запрещенный системный вызов: SYS_socketcall

Это для домашнего задания в классе CS. Я сделал всю работу, поэтому мне не нравится, что я прошу людей выполнить мое задание для меня. Мне просто интересно, почему я получаю эту ошибку, поскольку я новичок в языке C; Я исхожу из фона Java, а также некоторых языков веб-программирования. В любом случае, здесь описание назначения, если это поможет:

Выполните проверку символов в ISBN, чтобы проверить правильность.

Контрольный символ вычисляется следующим образом: сначала вычислите сумму первой цифры плюс два раза вторую цифру плюс три раза третью цифру,... плюс девять раз девятую цифру. Последний символ - это остаток, когда сумма делится на 11. Если остаток равен 10, последним символом является X. Например, сумма для ISBN 0-8065-0959-7 равна

1 * 0 + 2 * 8 + 3 * 0 + 4 * 6 + 5 * 5 + 6 * 0 + 7 * 9 + 8 * 5 + 9 * 9 = 249

Остальная часть, когда 249 делится на 11, равна 7, последний символ в ISBN. Символ проверки используется для проверки ISBN.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int checkISBN( char[] );  
#define size 18L
int main() {
int i,j;
char* s[size] = {
            "0-8065-0959-7",
            "0-534-37964-8", 
            "0-618-50298-X",
            "0-8065-0959-8", 
            "0-534-37964-9", 
            "0-618-50298-5",
            "0-534-37964-8", 
            "0-618-50298-X",            
            "032121353X",
            "0321199553",
            "0201794896",
            "0870495275",
            "0452264464", 
            "0536901562",
            "158901104X",  
            "080801076X",
            "80-902734-1-6"
            "158901104X" };


for( i = 0; i < size; i++){
    if( checkISBN( s[i] ) == 1 )
        printf("%-15s is a valid ISBN \n",s[i]);
    else
        printf("%-15s is NOT a valid ISBN*****\n",s[i]);
}

putchar('\n'); //write a newline
system("pause");'enter code here'
return EXIT_SUCCESS;
}



int checkISBN( char s[] ) 
{


int result = 0;
    int i;
int n = 1;
int sum = 0;
char ch[10];
    int final[10];
    int sizeOfArray = strlen(s);


for(i=0; i<sizeOfArray; i++){
if(s[i] == '-'){
++i;}
if(s[strlen(s)-1] == 'X'){
s[strlen(s)-1] = 10;}
ch[i] = s[i];
}

for(i=0; i<10; i++){
final[i] = atoi(&ch[i]);}

for(i=0; i<9; i++){
sum+= final[i]*n;
++n;}


int checkCharacter = sum%11;

if(checkCharacter == final[9]){
result = 1;}
  return result;} 
  • 1
    Э-э, почему вы используете system() ? Если вы действительно хотите дождаться нажатия клавиши, просто используйте getchar() . Во-вторых, подумайте, почему ch[i] = s[i] не так - что происходит, когда sizeOfArray > 10? (подсказка, это сбой при повреждении стека)
Теги:
error-handling
runtime-error
compiler-errors

1 ответ

0
Лучший ответ
#include <ctype.h>

int checkISBN( char s[] ) {
    int i, n = 1, sum = 0, checksum;

    for(i=0; s[i]; ++i){
        if(s[i] == '-')
            continue;
        if(n<10 && isdigit(s[i]))
            sum += n++*(s[i] - '0');
        else if(n==10){
            if(s[i] == 'X')
                checksum = 10;
            else if(isdigit(s[i]))
                checksum = s[i] - '0';
        }
    }
    return sum % 11 == checksum;
}

также

"80-902734-1-6", //need comma
  • 0
    Большое спасибо, BluePixy! Ты восхитителен!
  • 0
    Необходимо проверить форму более строго.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню