putchar、getchar、while while loop.
-
13-12-2019 - |
質問
このコードの安心に問題があり、小文字を大文字に変更し、複数のスペースを1つのスペースに変える必要があります。それで、それが間違っていること、それは私が「abcdefg」を書いたときの最初の手紙を切ることができます。
main(){
int z=0,b;
while ( (b = getchar() ) != '\n')
{
b=b-32;
if (b>0)
{
putchar(b);
}
else
{
if (z>=2)
{
putchar(b);
}
else
{
z=z+1;
printf(" ");
}
}
}
}
. 解決
私のためのすべての文字を生成するようです...あなたがそれをトレースしようとしましたか。
他のヒント
あなたの空のスペースの処理にはいくつかの問題があります。
どのような場合にスペースを印刷するように見えます(GetCharが0x20を返すとき)
あなたのスペースの問題を解消するためにこれから始めることができます。 それ以外の場合は、特定の問題がありますか。「最初の文字カット」の問題がないからです。
main(){
int z=1,b;
while ( (b = getchar() ) != '\n')
{
b=b-32;
if (b>0)
{
putchar(b);
z=1;
}
else
{
if (z>=2)
{
putchar(b);
}
else
{
z=z+1;
printf(" ");
}
}
}
}
. 最初に "32"のような定数を使用していないはずではなく、代わりにシステムに値が何であるかを定義させる必要があります。IE:b - = char( '');
2番目の関数 "islower()"と "toupper()"とcを見ると自動的にあなたのためにそれを実行します。
このようなものを考慮してください:
は
を含むmain() {
int flag = 0;
char b;
while ((b=getchar()) != '\n') {
if (flag && isspace(b))
continue;
putchar(toupper(b));
if (isspace(b)) {
flag = 1;
continue;
}
flag = 0;
}
putchar('\n');
.
}
入力:「A BC DEF GHIJGHG 123 A1B2C3」
出力:「A BC DEF GHIJGHG 123 A1B2C3」
注:入力行には空白がたくさんあるため、テキストボックスがスペースを除去しているように見えます。
常にあなたの境界条件を知っているべきです。入力が開始されたら、束のスペースがまだ1つのスペースを印刷します。すべての先行スペースを排除するには、フラグ= 1を初期化します。入力に末尾のスペースがある場合は、最終的なスペースも印刷されます。あなたがスペースと別の印刷可能な文字を見ると、わずかに異なる解決策を必要とするでしょう。