桃の夭夭 发表于 2021-11-1 16:05:53

有两行scanf不能运行,求大佬帮忙看看

int main()
{
    char a,b;
    int n,m,i;
    printf("input a n=");
    scanf("%d",&n);
    printf("input a[]\n");
    for(i=0;i<n;i++)
    {
      scanf("%c",&a);
    }
    printf("input b j=");
    scanf("%d",&m);//这行运行不了
    printf("input b[]\n");
    for(i=0;i<m;i++)
    {
      scanf("%c",&b);//这行也未运行
    }
    arr(a,n,b,m);
    return 0;
}PS:arr函数前面已经定义过了

番杰 发表于 2021-11-1 16:28:40

本帖最后由 番杰 于 2021-11-1 16:41 编辑

我其实有点好奇这条语句有没有运行:
for(i=0;i<n;i++)
    {
      scanf("%c",&a);
    }
&a,数组名前加&,它的数据类型是一个数组指针;
我也不太确定scanf("%c",&a);这个是否可以;

我建议改成这样试试:
.......
    for(i=0;i<n;i++)
    {
      scanf("%c",&a);//只修改这两个
    }
.....
.....
.....
    for(i=0;i<m;i++)
    {
      scanf("%c",&b);//只修改这两个
    }
.....

lei1996 发表于 2021-11-1 16:51:33

每个scanf函数后都加一行
getchar();
用来把你上面输入的回车\n读取掉 要不影响你下个sacnf的输入

lei1996 发表于 2021-11-1 16:54:32

其实只在两个for循环的scanf后加
getchar();也可以

jackz007 发表于 2021-11-1 17:17:49

       在每次键盘输入前,用 fflush(stdin)清空键盘缓冲区
#include <stdio.h>

int main(void)
{
    char a , b                            ;
    int n , m , i                                 ;
    printf("input a n = ")                     ;
    scanf("%d" , & n)                               ;
    printf("input a[] : ")                        ;
    fflush(stdin)                                 ; // 清除键盘缓冲区内剩余的回车符 '\n'
    for(i = 0; i < n ; i ++) scanf("%c" , & a) ;
    fflush(stdin)                                 ; // 清除键盘缓冲区内剩余的字符,以免影响后续输入
    printf("input b j = ")                     ;
    scanf("%d" , & m)                               ;
    printf("input b[] : ")                        ;
    fflush(stdin)                                 ; // 清除键盘缓冲区内剩余的回车符 '\n'
    for(i = 0 ; i < m ; i ++) scanf("%c" , & b ) ;
    fflush(stdin)                                 ; // 清除键盘缓冲区内剩余的字符,以免影响后续输入
    printf("a[] : ")                              ;
    for(i = 0 ; i < n ; i ++) printf("%c" , a)   ;
    printf("\n")                                    ;
    printf("b[] : ")                              ;
    for(i = 0 ; i < m ; i ++) printf("%c" , b)   ;
    printf("\n")                                    ;
}
      编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
input a n = 8
input a[] : ABCdefgHIJKL
input b j = 4
input b[] : 0987654321
a[] : ABCdefgH
b[] : 0987

D:\0002.Exercise\C>

桃の夭夭 发表于 2021-11-1 18:53:18

番杰 发表于 2021-11-1 16:28
我其实有点好奇这条语句有没有运行:

&a,数组名前加&,它的数据类型是一个数组指针;


它来了~

桃の夭夭 发表于 2021-11-1 18:54:23

jackz007 发表于 2021-11-1 17:17
在每次键盘输入前,用 fflush(stdin)清空键盘缓冲区

      编译、运行实况:

感谢感谢!!!
页: [1]
查看完整版本: 有两行scanf不能运行,求大佬帮忙看看