Pertanyaan Membaca string dari input dengan karakter luar angkasa?


Saya menggunakan Ubuntu dan saya juga menggunakan Geany dan CodeBlock sebagai IDE saya. Apa yang saya coba lakukan adalah membaca string (seperti "Barack Obama") dan memasukkannya ke dalam variabel:

#include <stdio.h>

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

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

    return 0;
}

Keluaran:

Enter your name: Barack Obama
Your Name is: Barack

Bagaimana saya bisa membuat program membaca seluruh nama?


75
2018-06-08 16:37


asal


Jawaban:


Menggunakan:

fgets (name, 100, stdin);

100 adalah panjang maksimal dari buffer. Anda harus menyesuaikannya sesuai kebutuhan Anda.

Menggunakan:

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

Itu [] adalah karakter scanset. [^\n] mengatakan bahwa ketika inputnya tidak sebuah baris baru ('\n') mengambil masukan. Kemudian dengan %*c itu membaca karakter baris baru dari buffer input (yang tidak terbaca), dan * menunjukkan bahwa ini dibaca dalam input dibuang (penindasan tugas), karena Anda tidak membutuhkannya, dan baris baru ini di buffer tidak menciptakan masalah untuk input berikutnya yang mungkin Anda ambil.

Baca di sini tentang scanset dan penindasan tugas operator.

Perhatikan Anda juga bisa menggunakan gets tapi ....

Tidak pernah digunakan gets(). Karena tidak mungkin untuk mengatakan tanpa mengetahui data terlebih dahulu berapa banyak karakter yang didapat () akan dibaca, dan karena gets() akan terus menyimpan karakter melewati ujung buffer, sangat berbahaya untuk digunakan. Ini telah digunakan untuk memecahkan keamanan komputer. Menggunakan fgets() sebagai gantinya.


144
2018-06-08 16:40



Coba ini:

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

\n setel pembatas untuk string yang dipindai.


21
2018-06-08 16:54



Berikut ini contoh bagaimana Anda bisa mendapatkan masukan yang berisi spasi dengan menggunakan fgets fungsi.

#include <stdio.h>

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

5
2017-09-02 00:52



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

str adalah variabel di mana Anda mendapatkan string.


3
2017-11-19 15:39



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

2
2018-06-26 06:29



CATATAN: Saat menggunakan fgets (), karakter terakhir dalam array akan menjadi '\ n' pada saat Anda menggunakan fgets () untuk input kecil dalam CLI (penerjemah baris perintah), saat Anda mengakhiri string dengan 'Enter'. Jadi ketika Anda mencetak string, kompilator akan selalu menuju ke baris berikutnya saat mencetak string. Jika Anda ingin string input memiliki string null seperti perilaku, gunakan peretasan sederhana ini.

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

return 0;
}

Pembaruan: Diperbarui dengan bantuan dari pengguna lain.


2
2018-01-18 12:02



Dengan menggunakan kode ini Anda dapat mengambil input sampai menekan enter keyboard Anda.

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

1
2017-08-23 11:18



#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;
}

1
2017-11-21 19:45