1

在下面的代码中,当我在 [az] 中输入任何内容后跟 \n forc时,它接受并打印“输入 d”。但是,当我为 提供任何数字时c,会扫描该值以查找变量d,然后仅显示“输入 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

2

如果您想跳过空格,例如结束换行符,请在格式代码之前添加一个前导空格:

printf("enter c: ");
i = scanf(" %s", c);

printf("enter c: ");
j = scanf(" %s", d);

这将scanf跳过所有空格。

另外,如果您想读取一个数字,为​​什么不使用例如"%d"格式代码将其作为数字读取呢?如果你想要它作为一个字符串,那么snprintf在扫描后使用 eg 来转换它。

于 2013-09-18T08:51:53.993 回答
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 回答