2012-04-16 2 views
-3

Здравствуйте, я изучаю тест для введения в класс программирования C, и вчера я пытался написать эту программу, чтобы распечатать четные простые числа между 2 и любым номером, который вводит пользователь, и я потратил около 2 часов, пытаясь написать его правильно, и в конце концов я это сделал. У меня есть 2 картинки, которые я загрузил ниже. Один из них отображает правильный код и правильный вывод. Другой показывает одну из моих первых попыток проблемы, которая не срабатывала корректно, я вернулся и сделал это как похожее на рабочий код, как я мог, без прямого копирования и вставки всего.C программирование. Почему «этот» код работает, но не «этот» код?

сожалению, новым пользователям не разрешено публиковать изображения, надеемся, эти ссылки ниже будут работать.

Это не удается, он не печатает все числа в диапазоне с натуральным квадратного корня:

for (i = 2; i <= x; i++) 
{ 
    //non relevant line 
    a = sqrt(i); 
    aa = a * a; 
    if (aa == i); 
     printf("%d ",i); 
} 

источник: http://i.imgur.com/WGG6n.jpg

В то время как это удается, и печатает четные номера с естественным Sqaure корня

for (i = 2; i <= x; i++) 
{ 
    a = sqrt(i); 
    aa = a * a; 
    if (aa == i && ((i/2) *2) == i) 
     printf("%d ", i); 
} 

источник: http://i.imgur.com/Kpvpq.jpg

Надеюсь, вы увидите и просмотрите снимки экрана, которые у меня есть. Я знаю, что изображение «неправильного кода» не имеет части (i/2) * 2 == i, но я решил, что он будет печатать только четные и четные числа, он также имеет код для вычисления «sqrd», но что не должно влиять на выход. Пожалуйста, поправьте меня, если я ошибаюсь в этой последней части.

И да, я использую Dev-C++, который я прочитал любопытный дерьмовые программы, но я Initally сделал это код :: Blocks и он сделал то же самое ...

Пожалуйста, я бы очень очень ценю любые советы или предложения относительно того, что я сделал не так, за 2 часа до того, как на самом деле я получу код штопа для меня.

Спасибо, Адам

+6

Просьба. ПОЖАЛУЙСТА. Поместите свой фактический код в сам вопрос.Как можно ожидать, что кто-нибудь поможет вам отладить, если мы не можем даже скопировать/вставить? –

+4

Вам не нужно размещать фотографии, вы можете (и должны) опубликовать соответствующий код непосредственно в свой вопрос. –

+1

Единственное чистое число - 2. Что вы пытаетесь сделать? – twain249

ответ

9

ваш код в 'что' включает в себя:

if (aa == i); 
//  ^
    printf(...); 

[обратите внимание на ; в конце, если условия]

Таким образом, если aa == i - пустое утверждение происходит, и печать всегда происходит, потому что она выходит за рамки оператора if.

Чтобы избежать этой проблемы в будущем, вы можете захотеть использовать явный Scoping [с использованием {, } после заявлений потока управления] - по крайней мере, во время ваших первых шагов программирования на языке.


1: спартанские программисты, вероятно, ненавижу это заявление

+0

Спасибо всем за ваш вклад, особенно amit. И я извиняюсь за сообщение вопроса с такой простой ошибкой, я действительно должен научиться лучше читать мою работу. Я был в этом часами, и мои глаза, должно быть, слишком устали. И я понимаю, почему вы все говорите, чтобы отправить текст «текст» в мой вопрос, и я сделаю это с этого момента. – 1337475

+0

@AdamJohnston: Вы не должны сожалеть о «вопросе с простой ошибкой» - каждый всегда учится! Я рад, что вы поняли, что в следующий раз вы должны опубликовать сам код, а не изображение. Также: вы должны [принять] (http://meta.stackexchange.com/q/5234/161469) ответ, который решает вашу проблему. – amit

+0

Ответ accepeted: D Спасибо за помощь. – 1337475

0

Такие ошибки являются общими. Я использую «step Over», «Step Into», «Break Points» и «Watch window» для отладки моей программы. Используя эти параметры, вы можете выполнять свою программу по очереди и отслеживать переменные, используемые в каждой строке. Таким образом, вы узнаете, какая строка не будет выполняться желаемым образом.

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