Возьмите строку в качестве входных данных от пользователя с помощью %c и %s и подтвердите, что обе строки равны

#c #string #strcmp

#c #строка #strcmp

Вопрос:

 #include <stdio.h> 
#include <string.h>
int main() {  
    char str1[20];
    char *str2;
    printf("enter string n"); **// using %c  input**
    scanf("%c",str1);
     printf(" string 1  is %s  n",str1);

  
     printf("enter string 2 n");
    scanf("%s",*str2); //using %s input
 
     printf(" string 1 and 2 is %c and %s n",str1,str2);**strong text**

    int a=strcmp(str1,str2); //**comparing both**
    printf("%d",a);
    return 0; 
 }
 

принял входные данные от пользователя, используя %c и %s
, затем использовал strcmp для сравнения равенства строк

Комментарии:

1. scanf("%c",str1) будет считан один символ с клавиатуры, также вы не можете назначить строку a char *var . Возможно, вы захотите поискать malloc .

Ответ №1:

  • %c считывает один символ и не добавляет завершающий нулевой символ, поэтому вы должны добавить его, чтобы использовать данные в качестве строки.
  • Буфер должен быть выделен и назначен str2 , прежде чем что-то там читать.
  • %s in scanf() требует указателя char* , поэтому str2 его следует передавать вместо *str2 .
  • %c в printf() requires int , not char* , поэтому вы должны учитывать указатель (автоматически преобразованный из массива).

Попробуйте это:

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {  
    char str1[20];
    char *str2;
    printf("enter string n"); // **using %c  input**
    scanf("%c",str1);
    str1[1] = ''; // add terminating null-charachter
    printf(" string 1  is %s  n",str1);

    str2 = malloc(102400); // allocate buffer
    if (str2 == NULL) return 1; // check if allocation is successful
    printf("enter string 2 n");
    // pass correct thing
    scanf("%s",str2); //using %s input
 
    printf(" string 1 and 2 is %c and %s n",*str1,str2); // pass correct thing for %c
    int a=strcmp(str1,str2); //**comparing both**
    printf("%d",a);
    free(str2); // free the allocated buffer
    return 0; 
}
 

Комментарии:

1. введите строку rorr строка 1 равна r введите строку 2 строка 1 и 2 равна r и orr 1

2. это не позволяет мне поместить вторую строку

3. @RutvikkWalde %c предназначен для чтения одного символа. Введите односимвольную строку для строки 1.

4. но я хочу написать srting / word как для строки 1, так и для строки 2

5. @RutvikkWalde Вы должны %s читать строки, а не %c .