C言語関係掲示板

過去ログ

No.1066 文字を入力に戻す

[戻る] [ホームページ]
No.13960

質問です!
投稿者---ブラザー(2004/05/12 02:03:51)


すみません、超初心者でさらに独学で勉強してるものなのですが、下の getint の書き方では、後に数字の付かない + あるいは - は、
ゼロの正しい表現として扱われる。そうした文字を入力に戻すように、このプログラムを直した上でmain を付けて、動作するプログラムを作れ。
っという問題がわかりません。教えてください
#include <ctype.h>

int getch(void);
void ungetch(int);

int getint(int *pn)
{
int c, sign;

while (isspace(c = getch()))
;
if (!isdigit(c) && c != EOF && c != '+' && c!= '-'){
ungetch(c);
return 0;
}
sign = (c =='-') ? -1: 1;
if (c == '+' || c == '-')
c = getch();
for (*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
*pn *= sign;
if (c != EOF)
ungetch(c);
return c;
}



No.13962

Re:質問です!
投稿者---はあ(2004/05/12 08:56:59)


とりあえず、名前変えてまでマルチポストをするべきじゃない。
ttp://www-cc.ee.tokushima-u.ac.jp/cgi-bin/cboard.cgi?log=&v=749&e=msg&lp=749&st=0

あと、Subjectのつけ方もだめ。
最後に何がどうわからないのか書くべき。




No.13963

Re:質問です!
投稿者---もぐりん(2004/05/12 09:03:34)


質問する前に、【掲示板ご利用上の注意】にある、注意書きは読みましたか?
・題名は具体的にお願いします。
・学校の課題はある程度ご自分の解き方をお示しください。
・ソースを添付する際には「HTML変換ツール」で字下げしてください。 
・なるべく詳しく環境などの情報をお書きください。 
これらについて守った上で、質問したほうが回答が付きやすいですよ。
質問の内容がいまいち不鮮明です。
main関数の書き方がわからないということでしょうか?
それと、'-'や'+'ってint型ではなくてchar型なんでは?
もう少し落ち着いてソースを書いてみては、どうでしょうか?




No.13982

Re:質問です!
投稿者---RAPT(2004/05/13 00:10:42)


整形+α
プログラムの動作が望ましい形かどうかは知りませんが…。

開発環境は、Windows2000sp4/VC++6.0sp6/Console-App


#include <stdio.h>
#include <conio.h>
#include <ctype.h>

int getint(int *pn)
{
  int c, sign;
  
  while(isspace(c = getch()));
  if (!isdigit(c) && c != EOF && c != '+' && c != '-'){
    ungetch(c);
    return 0;
  }
  sign = (c == '-') ? -1: 1;
  if (c == '+' || c == '-'){
    c = getch();
  }
  for (*pn = 0; isdigit(c); c = getch()){
    *pn = 10 * *pn + (c - '0');
  }
  *pn *= sign;
  if (c != EOF){
    ungetch(c);
  }
  return c;
}

int main()
{
  int n, c;

  printf("input >");
  while((c = getint(&n)) != 0){
    printf("\nvalue = %d\n\ninput >", n);
  }
  
  return 0;
}


もぐりんさん>
> それと、'-'や'+'ってint型ではなくてchar型なんでは?
''で括られた文字リテラルはint型です。
printf("char = %u\n", sizeof(char));
printf("int  = %u\n", sizeof(int));
printf("\'+\'  = %u\n", sizeof('+'));
※ "ABC"[0]は char型、'A'は int型になります。



No.13996

Re:質問です!
投稿者---もぐりん(2004/05/13 08:39:39)


もぐりんさん>
> それと、'-'や'+'ってint型ではなくてchar型なんでは?
''で括られた文字リテラルはint型です。

RAPTさん、フォローありがとうございます。
私の勘違いでした。