-1

クラスの宿題を終わらせようとしています。これらは要件です。 4 要件 1. LCD の最初の行に名前が表示され、そこに残ります。2. 数字キーを押すと、キーの数字が LCD の 2 行目の既存の数字に追加されます。行 2 が空白の場合、数字は行の最初の位置に表示されます。3. '#' キーを押すと、2 行目の数値の 2 倍の値が 3 行目に表示されます。入力または結果が範囲を超えている場合のエラー条件は、処理する必要はありません。5. '<em>' キーを押すと、LCD の 2 行目と 3 行目がクリアされますが、1 行目の名前は残ります。表示全体をクリアして、最初の行を再描画できます。6. '</em>の後

私は、読み取り配列から読み取り、その数値を 2 倍して 3 行目に表示するはずの部分で立ち往生しています。

  #include <hidef.h>      /* common defines and macros */
  #include "derivative.h"      /* derivative-specific definitions */
 #include <stdio.h>
  #include <stdlib.h> 
 #include "keypad.h"
 #include "LCD.h"
 #include "Delays.h"
void main(void)
{

char key;
const unsigned char message[] = "Christian ";   //data in Program Flash
char read [20];
int i=0;
DDRT = 0xF0;     // Upper nibble LEDs: output - logic low turns LED on
initKeypad();


  lcd_init();       // initialize LCD module
  lcd_puts(message); 

for(;;)            // Infinite while loop
{
    key = getKey();
    if(key){
    lcd_putc(key);

    read[i++] = key;
    switch(key){
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        break;
      case'#':
        break;
      case'*':
        break;

        default:break;
      atol(read[0]);
      sscanf( ,"%id", );
      read[20] * 2;
      string ltoa(read[0]);
      sprintf( ,"%d", );
      lcd_pos(3,1);           
      lcd_putc(read[20]);

    }
        delayby1ms(10);
        while(getKey());
        delayby1ms(10); 

           }
}//passes message address
}
// end of main function
4

1 に答える 1

3

プログラムがswitchステートメントを入力すると、制御式をそれぞれに一致させようとし、一致する場合caseはコードをcase実行し、一致するものがない場合はコードを実行しますdefault。に達すると、プログラムはステートメントbreak全体を終了します。switch

コードでは、すべてのcaseandのdefault後に が続くbreakため、 の最後のコードはswitch実行されません。

あなたのコードは少し乱雑です。おそらくこれはより明確です。この例では、printf値が保持されていても 2 つが実行されることはありませんkey

#include <stdio.h>
int main (void)
{
    char key = 'c';// key can be any character
    switch(key)
    {
        printf("something\n"); // will never execute
        case 'a':
            break;
        case 'b':
            break;
        default:
            break;
        printf("something\n"); // will never execute
    }
    return 0;
}
于 2013-07-24T03:21:04.123 に答える