Программа, которая получает размер строки и позволяет создавать ее по буквам в C - PullRequest
0 голосов
/ 08 октября 2018

У меня есть эта программа, в которой я застрял, в которой я пытаюсь получить размер строки и следую за ней, говоря пользователю вводить букву за буквой.Вот мой код.

#include<stdio.h>
#include<stdlib.h>

int main(){
    int size;
    int i;
    char letter;
    printf("Your string's size is...?: ");
    scanf("%d", &size);
    char mystring[size] ;
    for (i=0; i<size; i++){
        printf("Write a letter: \n");
        scanf("%c", &letter);
        mystring[i] = letter;

    }
    printf("%s",mystring);

    system("PAUSE");
    return 0;
}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Две вещи:

Во-первых, вам нужно завершить строку символом \0.В противном случае printf приведет к неопределенному поведению.

Во-вторых, обратите внимание, что scanf("%c",..), вероятно, будет использовать новую строку, оставленную в буфере, когда пользователь нажимает «enter» после ввода числа (то есть размера).

Запись:

char mystring[size+1] ;
for (i=0; i<size; i++){
    printf("Write a letter: \n");
    scanf("%c", &letter);
    if (i==0 && letter == '\n') {
       i--;
       continue;
    }
    mystring[i] = letter;
}
mystring[size] = '\0';

printf("%s",mystring);
0 голосов
/ 08 октября 2018

Здесь две проблемы.

Во-первых, спецификатор формата %c для scanf будет читать любой символ, включая символ новой строки.Вам нужно поставить перед ним пробел, чтобы поглотить любые новые строки во входном буфере:

scanf(" %c", &letter);

Во-вторых, вы не завершаете строку нулем и не оставляете достаточно места в массиве для хранениянулевой терминатор.Увеличьте массив на один элемент и добавьте нулевой байт в конце:

char mystring[size+1];
for (i=0; i<size; i++){
    ...
}
mystring[size] = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...