fgets()結果の改行要らないんだけど

Cの文字列処理がよく分からん。
fgets()してみたら改行が最後に入っててうざかったから

			char buf[20], *p;

			fgets(buf, 20, stdin);
			for (p = buf; *p != '\0'; p++)
				;
			p--;
			*p = '\0';

とかやって消したんだけど、バカっぽい。
普通どうするの?fscanf()?

追記

id:yshigeruさんの指摘はこういう感じかな。

            char buf[20], *p;
            fgets(buf, 20, stdin);
            p = buf + strlen(buf) - 1;
            *p = '\0';

まぁこれなら見なかったことに出来なくはないかなぁ…。

追記2

id:kazuhookuさんとsodaさんからツッコミを頂いたので、ちゃんとエラーチェックなどやってみる。

            char buf[20], *p;
            if (fgets(buf, 20, stdin) == null) {
                        printf("err\n");
                        return 1;
            }
            p = buf + strlen(buf) - 1;
            if (*p == '\n')
                        *p = '\0';