Как я могу взять входной символ из массива символов, используя % c, и выдать правильный вывод, используя % s?

#arrays #c #string #output #character

#массивы #c #строка #вывод #символ

Вопрос:

Это мой код.

 #include<stdio.h>
#include<string.h>
int main()
{
        int n, i;
        char ch[100];
        scanf("%d", amp;n);
        for(i = 0; i < n; i  ){
                scanf(" %c", amp;ch[i]);
        }
        printf("%sn", strupr(ch));
        return 0;
}
  

Сначала я хочу взять размер массива символов в переменной n. После я хочу взять n символов и присвоить массив. Вывод, полученный из этой программы, правильный, но он также выдает некоторые значения мусора.

Например:

 5
s d g h f
Output: SDGHFC└U▄■` 
  

Как я могу игнорировать значения мусора из моего вывода?

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

1. в c / cpp строка должна заканчиваться символом ‘ 0’, чтобы определить конец строки. вам нужно будет добавить его вручную после цикла с n-м индексом. имея это в виду, у вас будет граничный случай, когда сам ввод ‘n’ равен 100, и это приведет к результату, аналогичному тому, который вы получаете сейчас

2. Пожалуйста, попробуйте привести мне пример кодирования!!! Спасибо.

3. Пожалуйста, попробуйте привести мне пример кодирования!!! Спасибо.

Ответ №1:

Просто инициализируйте свой массив ch [] всеми нулями. Т.Е.

   for (i = 0; i < 100; i  = 1) { ch[i] = ''; }
 
  

Поместите эту строку сразу после объявления ch[] .

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

1. char ch[100]; —> char ch[100] = { 0 } или char ch[100] = "" сделал бы то же самое, что и инициализация . for() Цикл является более поздним назначением .

Ответ №2:

При чтении символов пробелы, которые вы вводите при вводе, также будут рассматриваться как символы, и strupr (c) выдаст несколько неаккуратный вывод, также вам придется вручную указать нулевой символ в конце вашего массива символов. Приведенная ниже программа может помочь вам найти нужный ответ

 #include<stdio.h>
#include<string.h>
int main()
{
        int n, i;
        scanf("%d", amp;n);
        fflush(stdin);
        char ch[100];
        for(i = 0; i < n; i  ){
                char temp;
                scanf("%c", amp;temp);
                if(temp != 'n')
                    ch[i] = temp;
                else
                    break;
        }
        ch[n] = '';
        printf("%sn", strupr(ch));
        return 0;
}
  

Ваш ввод должен выглядеть следующим образом

 5
sdghf
  

Для ввода с пробелами. Программа будет выглядеть следующим образом.

 #include<stdio.h>
#include<string.h>
int main()
{
        int n, i;
        scanf("%d", amp;n);
        fflush(stdin);
        char ch[100];
        char temp;
        i = 0;
        while(scanf("%c", amp;temp)){
                if(temp == ' ')
                    continue;
                if(temp != 'n')
                    ch[i  ] = temp;
                else
                    break;
        }
        ch[i] = '';
        printf("%sn", strupr(ch));
        return 0;
}
  

Теперь вы можете ввести свой символ в любом расположении по своему усмотрению.

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

1. Есть ли какой-либо способ получить вводимый символ с помощью пробела?? Я имею в виду символ, затем пробел …. и так далее.

2.Есть ли какой-либо способ получить вводимый символ с помощью пробела?? Я имею в виду символ, затем пробел …. и так далее.

3. Да, вы можете это сделать, поэтому я редактирую свой ответ на ваш запрос.

4. Примечание: fflush(stdin); это UB.

5. Большое вам спасибо. Я получил ответ. Но fflush (stdin) мне известен. Если вы знаете что-либо помимо этого, пожалуйста, опишите эту проблему.