2014-11-27 5 views
0
#include <iostream> 
#include <stdio.h> 
#include <math.h> 
#include <stdlib.h> 
using namespace std; 

int main(){ 
    int i=0,n,h,k; 
    k = (int)pow(10,5); 
    int c[k]; 
    scanf("%d%d",&n,&h); 

    if((n>=1 && n<=(int)pow(10,5)) && (h>=1 && h<=(int)pow(10,8))){ 
     int arr[n]; 

     do{ 
      scanf("%d",&arr[i]); 
      if(arr[i] > h){ 
      cout<<"Error !"; 
      exit(1); 
      } 
      i++; 
     }while(i!=(n-1)); 

     i=0; 

     do{     /*The fault occurs somewhere here, probably*/ 
      scanf("%d",&c[i]); 
      i++; 
     }while(c[i]!=0); 

     if(i>(int)pow(10,5)){ 
      cerr<<"Error !"; 
      exit(0); 
     } 

    } 
    return 0; 
} 

Я пытаюсь принять несколько номеров из консоли на разных линиях, используя scanf() (с определенными ограничениями на верхние и нижние пределы чисел). Проблема в том, я получаю ошибку сегментации где-то там, где я поставил комментарий - я не могу понять, где происходит ошибка - может кто-то указать на ошибку, которую я сделал?Исправление ошибки сегментации

+2

'к = (ИНТ) пау (10,5); int c [k]; 'Это недопустимо C++. Массивы в C++ должны иметь выражения времени компиляции для обозначения количества записей. – PaulMcKenzie

+0

Что было бы правильным заявлением? – Monk

+0

«Инструкция» заключается в использовании 'std :: vector c (k);' – PaulMcKenzie

ответ

2

Я думаю, что проблема здесь

do{     
    scanf("%d",&c[i]); 
    i++; 
}while(c[i]!=0); 

Рассмотрим текущее значение i является 0 и вы вводите значение в c[0] после этого increamenting значения i. Теперь i стать 1, а затем вы проверяете c[1] != 0, это проблема

использование

i=-1; 

do{  
    i++;    
    scanf("%d",&c[i]); 
    }while(c[i]!=0); 
+1

Это работает отлично! – Monk

1

scanf("%d",c[i]) должен быть scanf("%d",&c[i])

+0

Или просто 'std :: cin >> c [i];'. – chris

+0

@tnishada Я исправил это - исправление сегментации исправлено, похоже, теперь он не запускает цикл do-while, где я помещаю комментарий - он выходит только перед этим. – Monk

Смежные вопросы