This is the 3rd of my series of C/C++ puzzles; in case you missed the first 2 they are here:
(1) http://codegolf.stackexchange.com/questions/8506/m3ph1st0ss-programming-puzzle-1-c
(2) http://codegolf.stackexchange.com/questions/8529/m3ph1st0ss-programming-puzzle-2-c-call-hard

 I must say that my puzzles are 100% original. If not, I will always state so in the text.
 My 3rd puzzle has 2 parts as follows:

 Puzzle 3.1

This part (3.1) is not an original puzzle of mine, it is collected from some internet page I've read a while ago. I use it here as a starting point and a warm-up for you. Solve this one and then move on to the 2nd part.

Some one tried to print the "+" sign 20 times and came up with the following program:

    #include <stdio.h>
    int main() {
       int i;
       int n = 20;
       for( i = 0; i < n; i-- )
          printf("+");
       return 0;
    }

The fact that it did not have the expected result is obvious - the program never ends. Fix it!
Easy?
Now fix the program by changing ONLY ONE CHARACTER - non-space character of course! For this challenge there are 3 solutions. Find all 3 of them. Just to make it clear: the program must output 20 "+" signs and must end fast. Before criticizing me on what "fast" means, I'll say it means at most a couple of seconds (which by the way is too much but just to make it crystal clear).

 Puzzle 3.2

 When I first saw the puzzle I found it pretty awesome. I did manage to solve it but not immediately since it requires some careful attention.
 If you are here it means you too solved it. If you did so by writing a program to replace all possible characters with all possible values and test every solution, you are lost. Hard working guy though.
 Now having corrected the program that writes 20 "+" signs:

3.2.1: Insert **one single letter** and nothing more in the code so that the result is valid and outputs the same thing in all 3 corrected programs. Needless to say, the letter must be before the enclosing } of main (I say that because I don't want to hear people who just put a letter after the program and somehow their compiler was very friendly).
3.2.2: Choose another value to initialize the variable n so that the resulting output will remain the same for at least one of the 3 corrected programs (not necessarily for all of them).

**LAST EDIT1**: changing the program so that it outputs 21 "+" signs is still a good solution, as the original text did not say "exactly" 20 signs. However, the infinite output is forbidden. Obviously this doesn't mean let's all start outputting hundreds of "+"signs since it's not forbidden. But eliminating a beautiful 21 output would not be in the spirit of this competition.
**LAST EDIT2**: considering LAST EDIT1 it seems that now we have 5 possible solutions, four of which have already been pointed out in the responses. The last challenge however hasn't been touched and I must make it clear once more: **n** must be assigned **another value**, solutions that assign 20 to n by some tricks won't do it (like n=20L).

The challenge is to solve both parts of the puzzle. The first one to do it wins.

I hope it's all clear, if not please post any questions and I'll edit as quickly as possible. Cheers.