구글와이드(336x280)_상단 2개


Common Programming Mistakes IT 영문자료

What's wrong with my program - Common Programming Mistakes

This article is an attempt to explain the basic programming mistakes that beginners often make. It is an ongoing project that attempts to cover all the basic errors I get when people email me. If you're just starting out programming, looking through it might be a good way to solidify your programming knowledge.

  • Undeclared Variables:
    int main()
    {
      cin>>x;
      cout<<x;
    }
    
    "Huh? Why do I get an error?"

    Your compiler doesn't know what x means. You need to declare it as a variable.
    int main()
    {
      int x;
      cin>>x;
      cout<<x;
    }
    
  • Uninitialized variables:

    int count;
    while(count<100)
    {
      cout<<count;
    }
    
    "Why doesn't my program enter the while loop?"

    In C++ variables are not initialized to zero. In the above snippet of code, count could be any value in the range of int. It might, for example, be 586, and in that situation the while loop's condition would never be true. Perhaps the output of the program would be to print the numbers from -1000 to 99. In that case, once again, the variable was assigned a memory location with garbage data that happened to evaluate to -1000.

    Remember to initialize your variables.

  • Setting a variable to an uninitialized value:
    int a, b;
    int sum=a+b;
    cout<<"Enter two numbers to add: ";
    cin>>b;
    cout<<"The sum is: "<<sum;
    When Run:
    Enter two numbers to add: 1 3
    The sum is: -1393
    
    "What's wrong with my program?"

    Often beginning programmers believe that variables work like equations - if you assign a variable to equal the result of an operation on several other variables that whenever those variables change (a and b in this example), the value of the variable will change. In C++ assignment does not work this way: it's a one shot deal. Once you assign a value to a variable, it's that value until you reassign the values. In the example program, because a and b are not initialized, sum will equal an unknown random number, no matter what the user inputs.

    To fix this error, move the addition step after the input line.
    int a, b;
    int sum;
    cout<<"Enter two numbers to add: ";
    cin>>b;
    cin>>a;
    sum=a+b;
    cout<<"The sum is: "<<sum;
    
  • Using a single equal sign to check equality:
    char x='Y';
    while(x='Y')
    {
      //...
      cout<<"Continue? (Y/N)";
      cin>>x;
    }
    
    "Why doesn't my loop ever end?"

    If you use a single equal sign to check equality, your program will instead assign the value on the right side of the expression to the variable on the left hand side, and the result of this statement is TRUE. Therefore, the loop will never end. Use == to check for equality; furthermore, to avoid accidental assignment, put variables on the left hand side of the expression and you'll get a compiler error if you accidentally use a single equal sign as you can't assign a value to something that isn't a variable.
    char x='Y';
    while('Y'==x)
    {
      //...
      cout<<"Continue? (Y/N)";
      cin>>x;
    }
    
  • Undeclared Functions:
    int main()
    {
      menu();
    }
    void menu()
    {
      //...
    }
    
    "Why do I get an error about menu being unknown?"

    The compiler doesn't know what menu() stands for until you've told it, and if you wait until after using it to tell it that there's a function named menu, it will get confused. Always remember to put either a prototype for the function or the entire definition of the function above the first time you use the function.
    void menu();
    int main()
    {
      menu();
    }
    void menu()
    {
      ...
    }
    
  • Extra Semicolons:
    int x;
    for(x=0; x<100; x++);
      cout<<x;
    
    "Why does it output 100?"

    You put in an extra semicolon. Remember, semicolons don't go after if statements, loops, or function definitions. If you put one in any of those places, your program will function improperly.
    int x;
    for(x=0; x<100; x++)
      cout<<x;
    
  • Overstepping array boundaries:
    int array[10];
    //...
    for(int x=1; x<=10; x++)
      cout<<array[x];
    
    "Why doesn't it output the correct values?"

    Arrays begin indexing at 0; they end indexing at length-1. For example, if you have a ten element array, the first element is at position zero and the last element is at position 9.
    int array[10];
    //...
    for(int x=0; x<10; x++)
      cout<<array[x];
    
  • Misusing the && and || operators:
    int value;
    do
    {
      //...
      value=10;
    }while(!(value==10) || !(value==20))
    
    "Huh? Even though value is 10 the program loops. Why?"

    Consider the only time the while loop condition could be false: both value==10 and value==20 would have to be true so that the negation of each would be false in order to make the || operation return false. In fact, the statement given above is a tautology; it is always true that value is not equal to 10 or not equal to 20 as it can't be both values at once. Yet, if the intention is for the program only to loop if value has neither the value of ten nor the value of 20, is is necessary to use && : !(value==10) && !(value==20), which reads much more nicely: "if value is not equal to 10 and value is not equal to 20", which means if value is some number other than ten or twenty (and therein is the mistake the programmer makes - he reads that it is when it is "this" or "that", when he forgets that the "other than" applies to the entire statement "ten or twenty" and not to the two terms - "ten", "twenty" - individually). A quick bit of boolean algebra will help you immensely: !(A || B) is the equivalent of !A && !B (Try it and see). The sentence "value is other than [ten or twenty]" (brackets added to show grouping) is translatable to !(value==10 || value==20), and when you distribute the !, it becomes !(value==10) && !(value==20).

    The proper way to rewrite the program:
    int value;
    do
    {
      //...
      value=10;
    }while(!(value==10) && !(value==20))
    

null



바보들의 영문법 카페(클릭!!)

오늘의 메모....

시사평론-정론직필 다음 카페
http://cafe.daum.net/sisa-1

바보들의 영문법 다음 카페
http://cafe.daum.net/babo-edu/

티스토리 내 블로그
http://earthly.tistory.com/

내 블로그에 있는 모든 글들과 자료에 대한 펌과 링크는 무제한 허용됩니다.
(단, 내 블로그에 덧글쓰기가 차단된 자들에게는 펌, 트랙백, 핑백 등이 일체 허용되지 않음.)

그리고 내 블로그 최근글 목록을 제목별로 보시려면....
바로 아래에 있는 이전글 목록의 최근달을 클릭하시면 됩니다.
그러면 제목을 보고 편하게 글을 골라 보실 수 있습니다.

그리고 내 블로그내 글을 검색하시려면 아래 검색버튼을 이용하시면 됩니다.


가가챗창

flag_Visitors

free counters