Переполнение размера Int при выполнении этой части программы

#c #debugging #scanf #overflow

Вопрос:

когда я запускаю эту программу, я получаю переполнение, и я не знаю, как это исправить. Программа представляет собой калькулятор мощности квадратной матрицы, и она получает входные данные из текстового файла. Он считывает данные из файла, отформатированного таким образом:

 3 // size of a square matrix so in this case a 3X3 matrix 1 2 3 // all these numbers are inputs for each [i][j] entry 4 5 6 7 8 9 2// exponent to perform multiplication  

В коде есть крайний случай, когда, если вы введете размер матрицы 1, вам просто нужно выполнить операцию питания при следующем вводе по показателю, указанному в следующей строке. Вот где я сталкиваюсь с переполнением. Есть какие-нибудь советы?

 int size;   fscanf(file, "%d", amp;size);    if(size==1){  int n;  int exp;  int res = pow(n,exp);  fscanf(file, "%d", amp;n);  fscanf(file, "%d", amp;exp);    printf("%d",res);   }  

Изменить: Предположим, что все входные данные в правильном формате.

Комментарии:

1. pow() вызывается с неинициализированными значениями. Может быть, ты собираешься позвонить pow() после fscanf() ?

2. @sj95126 дай мне посмотреть, исправит ли это

3. @sj95126 к сожалению, нет, у меня было еще больше проблем, поэтому я решил использовать цикл for для питания, но я продолжаю получать переполнение Int, указывающее: -1094795586 * -1094795586 cannot be represented in type 'int'

4. @sj95126 кстати, я не ввожу эти числа, мой тестовый случай-размер =1 запись = 12 показатель = 2, поэтому ожидаемый результат-144

5. Я попытался переместить int res = pow(n, exp); строку в пустую строку до printf и file до stdin ввода: 1 12 2 , печатает 144 . Попробуйте внести эти изменения (включая file stdin «кому» и ввод вручную этого точного ввода) и удалите весь остальной код , кроме необходимой int main() { … return 0; } оболочки. Если это устранит проблему (она должна исчезнуть), верните свои изменения по одному за раз и посмотрите, что ее нарушает.

Ответ №1:

Предлагаю вам отладить вашу программу, заменив все функции fscanf() простыми заданиями, подобными этому:

 size = 3; // fscanf(file, "%d", amp;size);  

Затем снова запустите свой код. Если вы получаете переполнение, то это не имеет никакого отношения к чтению файла. Если это действительно устраняет проблему, попробуйте добавить printf() после каждого fscanf (), чтобы проверить, какое значение, вот так:

 fscanf(file, "%d", amp;size); printf("size = %d nr", size);