Я использую кодовые блоки, и он дает другой вывод другим компиляторам, и я не могу найти решение для него. Какое неопределенное поведение в этой программе и есть ли какое-либо решение, чтобы избежать этого?Является ли i = i + 1 неопределенным поведением?
Это код для печати п-е число в системе счисления с только 3 & 4.
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,i,value;
scanf("%d",&n);
value=i=0;
while(n>0)
{
if((n%2)==0)
{
value+=4*pow(10,i);
}
else
{
value+=3*pow(10,i);
}
n=(n-1)/2;
i=i+1;
}
printf("\nThe number is : %d",value);
}
Он отлично работает для чисел ДО 6..And выход для чисел больше 6 на единицу меньше, чем на самом деле. Например. если n = 7, выход = 332, где должно быть 333.
EDIT: При условии полного кода с фигурными скобками.
Ответ на вопрос в названии действительно зависит от языка, его дизайна и спецификации. Но в общем случае 'i = i + 1' является четко определенной операцией. –
Что касается вашей проблемы, это похоже на некоторый код C, а в C-вдавливании не значителен, что означает, что код в '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'находится за пределами 'else'. –
Всегда используйте брекеты! Если вы не хотите работать в Apple, то есть. – Lundin