0

当我在 c 中编写此代码时,它不起作用,但是当我进行一些更改(例如用 cin 和 cout 替换)时,它在 c++ 中可以正常工作

#include <stdio.h>
    #include <string.h>
    int main()
    {
        int i=0,l,m;
        char str[10],c;
        printf("Enter string:");
        scanf("%s",str);
        printf("Enter character u want to search:");
        scanf("%s",c);
        l=strlen(str);
        while (str[i]){
            if (str[i]==c){
                m=1;
                break;
            }
            else{
                m=0;
            }
            i++;
        }
        if (m==1){
            printf("Present \n");
        }
        else{
            printf("Not present \n");
        }
    }
4

3 回答 3

2

您需要按照此答案scanf中的说明对单个字符进行操作。只需替换为.scanf("%s",c)scanf(" %c", &c)

printf("Enter character u want to search:");
scanf(" %c", &c)
于 2022-01-22T10:21:19.290 回答
1

变量c被声明为 char 类型的单个对象

char str[10],c;

因此,要使用对象在对象中输入数据,scanf您必须使用转换说明符%c而不是%s指定用于输入字符串并通过指针通过引用传递对象的转换说明符

scanf( " %c", &c );

注意转换说明符前的空白%c。它允许跳过输入流中的空格。

此外,变量m应该在 while 循环之前初始化,例如

int i=0,l,m = 0;

并且该变量l应该被删除,因为它实际上没有被使用。的调用strlen是多余的。

并且您需要在使用它们的最小范围内声明变量。

该程序可以如下所示

#include <stdio.h>

int main( void )
{
    char str[10] = { 0 };

    printf( "Enter string: " );
    scanf( "%9s", str );

    char c = 0;

    printf( "Enter character you want to search:" );
    scanf( " %c", &c );

    size_t i = 0;

    while ( str[i] != '\0' && str[i] != c ) i++;

    if ( str[i] != '\0' )
    {
        printf( "The character %c is present in the string.\n", c );
    }
    else
    {
        printf( "The character %c is not present in the string.\n", c );
    }
}
于 2022-01-22T10:19:56.783 回答
0

您的第二个 scanf 试图将字符串放入单个字符中。(scanf("%s",c); 将其扫描为 char 或 int,或者使用数组存储字符串,然后从中提取第一个 char 用于比较测试。

于 2022-01-22T10:16:30.137 回答