scanf格式说明符我想获取输入并一次性分配给两个字符串变量

时间:2018-03-16 22:04:25

标签: c scanf string-formatting

我正在学习C编程,希望掌握scanf功能。

#include<stdio.h>                                                                                                                         

int main() {                                                       

    char s1[20], s2[20];                                                   

    scanf("%[^0-9]s%[0-9]s",s1,s2); // [^0-9] stops assging when encounters                                       
                                    // [0-9] expects only 0-9 and assigs    
    puts(s1);                                                             
    puts(s2);                                                             
    return 0;                                                                                                               
}                                                                         

运行程序:

asdasd123123
asdasd
ç£nU

我哪里错了?

1 个答案:

答案 0 :(得分:1)

您的scanf()语法稍微偏离了一点:

int main() {
    char s1[20], s2[20];

    scanf("%[^0-9]%[0-9]", s1, s2); // [^0-9] stops assging when encounters     
                                      // [0-9] expects only 0-9 and assigs    
    puts(s1);
    puts(s2);

    return 0;
}

检查scanf()的返回值肯定是个好主意,特别是在尝试读入多个变量时,看看实际分配的值有多少。

#define NUM_ARGS 2

int main() {
    char s1[20], s2[20];
    int ret;

    if ((ret = scanf("%[^0-9]%[0-9]", s1, s2)) != NUM_ARGS) {
        printf("ERROR\n");
    } else {
        puts(s1);
        puts(s2);
    }

    return 0;
}