0

こんにちは、私はCプログラミングの初心者です。現在、ユーザー入力を取得する簡単なアプリを開始しています。ユーザーから入力を取得し、ユーザー入力が文字列、整数、または両方の組み合わせを含むかどうかを区別するにはどうすればよいですか。

私は次のことを試しました:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char * argv[])
{
    char * s = "CPROGRAMMING";
    int i;
    boolean flag = true;
    for(i = 0;, i < strlen(s) && flag == true; i++)
    {
        if(isalpha(s[i]) && isupper(s[i])) flag = true;
        else flag = false;
    }
    if(flag) printf("A string contains only uppercase and alphabet letters\n");
    return 0;
}

しかし、正しい入力を見つけるのに失敗しているようです。ここで何が欠けていますか?

4

3 に答える 3

1
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int main (int argc, char* argv[])
{
    (void) argc;
    (void) argv;

    const char* s = "CPROGRAMMING";
    bool upper_case = true;
    for (int i = 0; i<strlen(s) && upper_case ; i++)
    {
        if (!isalpha(s[i]) || !isupper(s[i]))
        {
            upper_case = false;
        }
    }

    if (upper_case)
    {
        printf("A string contains only uppercase and alphabet letters\n");
    }

    return 0;
}

修正:

  • 正しいヘッダーが含まれています。
  • 正しいブール型を使用しています。
  • ブール論理をクリアしました。
  • コードのフォーマットを修正しました。
  • 文字列リテラルへのポインタを正しく宣言します。
  • mainへのパラメータが使用されていないことを明確にしました。
于 2013-03-04T07:47:35.357 に答える
1

問題のいくつか:

  • ユーザー入力を取得するには、 を使用しますscanf
  • C には がありませbooleanint
  • あなたのループは冗長です.とにかく最後の文字だけをチェックします-まあ、すべてをチェックしますが、最後にフラグを設定したときに最後の文字だけが考慮されます. を使用して、必要に応じてループから実行を中断できますbreak
  • ループ内の条件に迷いがあり,ます。
于 2013-03-04T07:38:33.963 に答える
1

コードに構文上の問題があります。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int main(int argc, char* argv[])
{
    char* s = "CPROGRAMMING";
    int i;
    bool flag = true;
    for (i = 0; i < strlen(s) && flag; i++)
    {
        if (isalpha(s[i]) && isupper(s[i]))
            flag = true;
        else
            flag = false;
    }
    if (flag)
        printf("A string contains only uppercase and alphabet letters\n");
    return 0;
}
于 2013-03-04T07:38:45.937 に答える