无法在此C程序中找到错误

3 c input scanf

我无法在这个C程序中找到错误.

#include <stdio.h>

int main()
{ 

    struct book 
    { 
        char name ; 
        float price ; 
        int pages ; 
    } ;

    struct book b[3] ;
    int i ; int k;
    for ( i = 0 ; i <= 2 ; i++ )
    { 
        printf ( "\nEnter name, price and pages: " ) ;
        k = scanf ( "%c %f %d", &b[i].name, &b[i].price, &b[i].pages ) ;
    } 
    for ( i = 0 ; i <= 2 ; i++ ) 
        printf ( "\n%c %f %d", b[i].name, b[i].price, b[i].pages ) ;
    //getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行:

Enter name, price and pages: a 1 1

Enter name, price and pages: b 2 2

Enter name, price and pages:
a 1.000000 1

 7922540190797673100000000000000000.000000 4200368
b 2.000000 2
Run Code Online (Sandbox Code Playgroud)

我想给a 1 1,b 2 2,c 3 3因为我的每个scanfs投入,但没等我在第3 scanf函数输入.为什么这样?为什么它读取我的第二次输入第三元素数组?

Pra*_*rav 8

添加一个getchar()你的scanf()

 for ( i = 0 ; i <= 2 ; i++ )
  { 
      printf ( "\nEnter name, price and pages: " ) ;
      k = scanf ( "%c %f %d", &b[i].name, &b[i].price, &b[i].pages ) ;

      getchar(); //will clear the buffer
  } 
Run Code Online (Sandbox Code Playgroud)

PS:不要scanf()用于char入境.

  • +1链接"不要使用scanf()进行字符输入." (5认同)

小智 7

与其他说明符不同,%c与scanf一起使用时不会忽略空格.您可能希望在任何情况下都使名称字段为字符串:

#include <stdio.h>

int main()
{ 
    struct book 
    { 
        char name[10] ;   // or some suitable size
        float price ; 
        int pages ; 
    } ;

    struct book b[3] ;
    int i ; int k;
    for ( i = 0 ; i <= 2 ; i++ )
    { 
        printf ( "\nEnter name, price and pages: " ) ;
        k = scanf ( "%s %f %d", b[i].name, &b[i].price, &b[i].pages ) ;
    } 
    for ( i = 0 ; i <= 2 ; i++ ) 
        printf ( "\n%s %f %d", b[i].name, b[i].price, b[i].pages ) ;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)