在字段规范之间使用非空白字符合法吗?如果是';好吧,那么我们能期望的结果是什么? #包括 main(){ INTA、b、c; scanf(“%d-%d”、&a和&b); c=a+b; printf(“%d”,c); }

在字段规范之间使用非空白字符合法吗?如果是';好吧,那么我们能期望的结果是什么? #包括 main(){ INTA、b、c; scanf(“%d-%d”、&a和&b); c=a+b; printf(“%d”,c); },c,C,这段代码的输出是什么?是的,在scanf格式字符串中使用非空白字符是合法的。这些字符将被读取并跳过。如果输入中没有给出这些字符,scanf将在该点停止读取 例如,如果您的输入是3-4,则3将存储在a中,-将匹配模式,4将存储在b中,因此输出为7 另一方面,如果您输入了4x5,则4将存储在a中,但x将停止读取进一步的输入,因为它与-不匹配。然后b将有一个未定义的值,向其中添加值的结果也将是未定义的。您可以使用非空白分隔值。这里输入3--1将产生2。 检查scanf的返回。如果失败,可能需要清理输入

这段代码的输出是什么?

是的,在
scanf
格式字符串中使用非空白字符是合法的。这些字符将被读取并跳过。如果输入中没有给出这些字符,
scanf
将在该点停止读取

例如,如果您的输入是
3-4
,则
3
将存储在
a
中,
-
将匹配模式,
4
将存储在
b
中,因此输出为7


另一方面,如果您输入了
4x5
,则4将存储在
a
中,但
x
将停止读取进一步的输入,因为它与
-
不匹配。然后
b
将有一个未定义的值,向其中添加值的结果也将是未定义的。

您可以使用非空白分隔值。这里输入3--1将产生2。
检查scanf的返回。如果失败,可能需要清理输入流,以便后续扫描能够成功

#include<stdio.h>

main(){

int a,b,c;
scanf("%d-%d",&a,&b);
c=a+b;
printf("%d",c);


}
#包括
内部主(空){
INTA、b、c;
int结果=0,clean=0;
做{
printf(“输入两个数字作为n-n\n”);
如果((result=scanf(“%d-%d,&a,&b))!=2){/!=2扫描失败
如果(结果==EOF){
printf(“无法扫描\n”);
返回1;
}
而((clean=getchar())!='\n'){
;//清除输入流
}
}
}while(result!=2);//循环错误输入
c=a+b;
printf(“%d\n”,c);
返回0;
}

还有,为什么不试试呢?@IngoBürk man scanf。你试过了吗?输入?输出?有什么惊喜吗?@AmirKhasru代码应该检查
scanf
的返回值。在您的情况下,返回值应该是2。如果是
如果scanf停止,那么我们将找到垃圾。@AmirKhasru正是如此。由于
a
b
未初始化,因此
scanf
故障将导致一个或两个未初始化。最佳伙伴。谢谢:)
#include <stdio.h>

int main( void){
    int a,b,c;
    int result = 0, clean = 0;
    do {
        printf ( "enter two numbers as n-n\n");
        if ( ( result = scanf("%d-%d",&a,&b)) != 2) {//!=2 is scan failed
            if ( result == EOF) {
                printf ( "could not scan\n");
                return 1;
            }
            while ( ( clean = getchar ( )) != '\n') {
                ;//clean input stream
            }
        }
    } while ( result != 2);//loop on bad input
    c=a+b;
    printf("%d\n",c);
    return 0;
}