#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);