1

次のコードでは、[az] に何かを入力し、その後に \n for をc入力すると、「enter d」が受け入れられて出力されます。しかし、 に数値を指定するとc、その値が変数に対してスキャンされ、d「enter d」のみが表示されます。これはどのように起こりますか?

#include<stdio.h>

void main()
{
    char c[10],d[10];
    int i,j;

    printf("enter c:");
    i=scanf("%[a-z]%1[\n]",c);

    printf("\nenter d:");
    j=scanf("%[ 0-9]%1[\n]",d);

    printf("\nc : %s-%d\n",c,i);
    printf("\nd : %s-%d\n",d,j);
 }

私の出力は次のとおりです。

enter c:12

enter d:c:�-0

d:12-2
4

2 に答える 2

1

これを試して:

#include<stdio.h>
#include <stdlib.h>

int main()
{
    char *c = malloc(10);
    char *d = malloc(10);

    int i = 0;

    printf("enter c:");
    int x = EOF;
    while (( x = getchar()) != '\n' && x != EOF) {
        if (i >= 10) {
            break;
        }
        if (x >= 97 && x <= 122) {
            c[i++]=(char)x;
        }
    }
    printf("\nenter d:");
    x = EOF;
    i = 0;
    while (( x = getchar()) != '\n' && x != EOF) {
        if (i >= 10) {
            break;
        }
        if (x >= 48 && x <= 57) {
            d[i++]=(char)x;
        }
    }
    printf("\nc : %s\n",c);
    printf("\nd : %s\n",d);
    return 1;
 }
于 2013-09-18T09:08:30.303 に答える