注册 登录
编程论坛 C语言论坛

在循环中不断读取新的字符串和字符做为函数的两个参数,并且将它们传递给函数

hffjhhh 发布于 2020-06-10 18:19, 1483 次点击
在循环中不断读取新的字符串和字符做为函数的两个参数,并且将它们传递给函数,然后在函数中判断如果形参字符串包含形参字符,则返回1,否则返回0.
但该程序为何无法输入字符串?请问以下代码有什么问题?
程序代码:
#include"stdio.h"
int ar(char *p,char n){
    int j;
    j=0;
    int i;
    i=0;
    while(p[i]){
        if(p[i]==n){
            j=1;
            break;
        }
            else
                ;
        i++;   
    }
    return j==1?1:0;
}
int main(void){
    char *y;
    int r=1;
    char b;
    int c,i;
    i=0;
    char *a[100];
    printf("输入字符串:");
    gets(a[0]);
    while(1){
        printf("输入字符:");
        b=getchar();
        c=ar(a,b);
        printf("%d\n",c);
        printf("输入字符串:");
        i++;
        gets(a[i]);
    }
    return 0;
}

6 回复
#2
rjsp2020-06-10 20:16
程序代码:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>

bool ar( const char* s, char n )
{
    for( ; *s && *s!=n; ++s );
    return *s==n;
}

int main( void )
{
    for( ; ;)
    {
        char a[100];
        printf("输入字符串(别超过98个字符):");
        if( !fgets(a,sizeof(a),stdin) )
            break;

        size_t n = strlen(a);
        if( a[n-1] != '\n')
        {
            puts( "你不听劝告,输入的字符串太长了。" );
            break;
        }
        a[n-1] = '\0';

        printf("输入字符:");
        int b = getchar();
        if( b == EOF )
            break;
        scanf( "%*[^\n]" );
        scanf( "%*c" );

        bool result = ar( a, b );
        printf( "字符串 \"%s\" 中%s字符 \'%c\' \n\n", a, (result?"存在":"不存在"), b );
    }
}

#3
lin51616782020-06-10 20:19
    char *a[100];
    printf("输入字符串:");
    gets(a[0]);

a[0] 野指针 GG
后面不用看了
#4
hffjhhh2020-06-10 23:05
以下是引用lin5161678在2020-6-10 20:19:41的发言:

    char *a[100];
    printf("输入字符串:");
    gets(a[0]);
a[0] 野指针 GG
后面不用看了

那这里应该怎么改?
#5
hffjhhh2020-06-10 23:30
以下是引用rjsp在2020-6-10 20:16:59的发言:

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

bool ar( const char* s, char n )
{
    for( ; *s && *s!=n; ++s );
    return *s==n;
}

int main( void )
{
    for( ; ;)
    {
        char a[100];
        printf("输入字符串(别超过98个字符):");
        if( !fgets(a,sizeof(a),stdin) )
            break;

        size_t n = strlen(a);
        if( a[n-1] != '\n')
        {
            puts( "你不听劝告,输入的字符串太长了。" );
            break;
        }
        a[n-1] = '\0';

        printf("输入字符:");
        int b = getchar();
        if( b == EOF )
            break;
        scanf( "%*[^\n]" );
        scanf( "%*c" );

        bool result = ar( a, b );
        printf( "字符串 \"%s\" 中%s字符 \'%c\' \n\n", a, (result?"存在":"不存在"), b );
    }
}

为何你的代码可以重复输入字符串,在我的代码中将gets改为fgets语句之后,我的代码依然无法重复输入字符串?
程序代码:
#include"stdio.h"
int ar(char *p,char n){
    int j;
    j=0;
    int i;
    i=0;
    while(p[i]){
        if(p[i]==n){
            j=1;
            break;
        }
            else
                ;
        i++;   
    }
    return j==1?1:0;
}
int main(void){
    char *y;
    int r=1;
    char b;
    int c,i;
    i=0;
    char a[100];
    printf("输入字符串:");
    fgets(a,sizeof(a),stdin);
    while(1){
        printf("输入字符:");
        b=getchar();
        c=ar(a,b);
        printf("%d\n",c);
        printf("输入字符串:");
        fgets(a,sizeof(a),stdin);
    }
    return 0;
}
#6
hffjhhh2020-06-11 18:22
回复 楼主 hffjhhh
有没人来解释下我上面的疑惑?
#7
hffjhhh2020-06-11 21:59
回复 5楼 hffjhhh
顶一下,有人看到这个问题吗?
1