Чтение строки из ввода с символом пробела?

Я использую Ubuntu, и я также использую Geany и CodeBlock в качестве моей IDE. То, что я пытаюсь сделать, это прочитать строку (например, "Barack Obama") и поместить ее в переменную:

#include <stdio.h>

int main(void)
{
    char name[100];

    printf("Enter your name: ");
    scanf("%s", name);
    printf("Your Name is: %s", name);

    return 0;
}

Вывод:

Enter your name: Barack Obama
Your Name is: Barack

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

Ответ 1

Использование:

fgets (name, 100, stdin);

100 - максимальная длина буфера. Вы должны отрегулировать его в соответствии с вашими потребностями.

Использование:

scanf ("%[^\n]%*c", name);

[] - это символ сканирования. [^\n] говорит, что, хотя вход не является символом новой строки ('\n'), введите ввод. Затем с %*c он считывает символ новой строки из входного буфера (который не читается), а * указывает, что это чтение во входном файле отбрасывается (подавление присваивания), поскольку оно вам не нужно, и эта новая строка в буфере не создает никаких проблем для следующих входов, которые вы могли бы сделать.

Читайте здесь о сканировании и операторах подавление присваивания.

Заметьте, вы также можете использовать gets, но....

Никогда не используйте gets(). Потому что невозможно сказать, не зная заранее данные о том, сколько символов будет получать(), и потому что gets() будет продолжать хранить символы за концом буфера, крайне опасно использовать. Он используется для защиты компьютерной безопасности. Вместо этого используйте fgets().

Ответ 2

Попробуйте следующее:

scanf("%[^\n]s",name);

\n просто устанавливает разделитель для отсканированной строки.

Ответ 3

Вот пример того, как вы можете получить ввод, содержащий пробелы, с помощью функции fgets.

#include <stdio.h>

int main()
{
    char name[100];
    printf("Enter your name: ");
    fgets(name, 100, stdin); 
    printf("Your Name is: %s", name);
    return 0;
}

Ответ 4

scanf(" %[^\t\n]s",&str);

str - это переменная, в которой вы получаете строку.

Ответ 5

#include<stdio.h>
int main()
{
   char name[100];
   printf("Enter your name: ");
   scanf("%[^\n]s",name);
   printf("Your Name is: %s",name);
   return 0;
}

Ответ 6

ПРИМЕЧАНИЕ. При использовании fgets() последний символ в массиве будет "\n" в то время, когда вы используете fgets() для небольших входов в CLI (интерпретатор командной строки), когда вы заканчиваете строку с помощью 'Enter'. Поэтому, когда вы печатаете строку, компилятор всегда будет переходить к следующей строке при печати строки. Если вы хотите, чтобы строка ввода имела нулевую завершенную строку, такую ​​как поведение, используйте этот простой хак.

#include<stdio.h>
int main()
{
 int i,size;
 char a[100];
 fgets(a,100,stdin);;
 size = strlen(a);
 a[size-1]='\0';

return 0;
}

Обновление: обновлено с помощью других пользователей.

Ответ 7

"%s" будет считывать ввод до тех пор, пока не будет достигнуто свободное пространство.

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

Ответ 8

"Барак Обама" имеет пространство между "Бараком" и "Обамой". Чтобы это учесть, используйте этот код;

#include <stdio.h>
int main()
{
    printf("Enter your name\n");
   char a[80];
   gets(a);
   printf("Your name is %s\n", a);
   return 0;
}

Ответ 9

Используя этот код, вы можете вводить ввод до нажатия клавиши ввода.

char ch[100];
int i;
for (i = 0; ch[i] != '\n'; i++)
{
    scanf("%c ", &ch[i]);
}

Ответ 10

Правильный ответ таков:

#include <stdio.h>

int main(void)
{
    char name[100];

    printf("Enter your name: ");
    // pay attention to the space in front of the %
    //that do all the trick
    scanf(" %[^\n]s", name);
    printf("Your Name is: %s", name);

    return 0;
}

Это пространство перед% очень важно, потому что если у вас в вашей программе еще несколько scanf, скажем, что у вас есть 1 scanf целочисленного значения, а другое scanf с двойным значением... когда вы дойдете до scanf для своего char (имя строки), эта команда будет пропущена, и вы не сможете ввести значение для нее... но если вы поместите это пространство перед%, все будет в порядке и не пропустите ничего.

Ответ 11

#include <stdio.h>
// read a line into str, return length
int read_line(char str[]) {
int c, i=0;
c = getchar();
while (c != '\n' && c != EOF) { 
   str[i] = c;
   c = getchar();
   i++;
}
str[i] = '\0';
return i;
}

Ответ 12

scanf("%s",name);

используйте & с входом scanf