Cách lấy đầu vào của mảng trong một dòng trong c ++

Trong bài viết này, chúng tôi đã giải thích cách nhập chuỗi trong Ngôn ngữ lập trình C bằng các ví dụ mã C. Chúng tôi đã giải thích các trường hợp khác nhau như lấy một từ, nhiều từ, cả dòng và nhiều dòng bằng các chức năng khác nhau

Mục lục

  1. Nhập chuỗi bằng hàm scanf
    1. 1. Đọc một từ
    1. 2. Đọc nhiều từ
    1. 3. Đọc nhiều từ để tạo thành một dòng
    1. 4. Đọc toàn bộ một dòng
  2. Sử dụng getchar
  3. Đọc toàn bộ dòng bằng cách sử dụng get()
  4. Đọc từng dòng một từ tệp bằng fgets()
  5. Đọc nhiều dòng

Hãy để chúng tôi tìm hiểu các kỹ thuật này bằng cách sử dụng các ví dụ về mã C

Nhập chuỗi bằng hàm scanf

Hàm đầu vào scanf có thể được sử dụng với đặc tả định dạng %s để đọc trong một chuỗi ký tự

Đọc một từ

Ví dụ

char instr[10];
scanf("%s",instr);

Vấn đề với hàm scanf là nó kết thúc đầu vào của nó trên khoảng trắng đầu tiên mà nó tìm thấy. Khoảng trắng bao gồm khoảng trống, tab, xuống dòng, nguồn cấp biểu mẫu và dòng mới

Do đó, nếu dòng văn bản sau được gõ

HELLO BOY

thì chỉ có chuỗi "HELLO" được đọc vào địa chỉ mảng, vì khoảng trống sau từ 'MỚI' sẽ chấm dứt việc đọc chuỗi.
Các vị trí không sử dụng chứa đầy rác.

Hàm scanf tự động kết thúc chuỗi được đọc bằng ký tự null và do đó, mảng ký tự phải đủ lớn để chứa chuỗi đầu vào cộng với ký tự null. Lưu ý rằng không giống như các lệnh gọi scanf trước đây, trong trường hợp mảng ký tự, dấu và (&) không bắt buộc trước tên biến

Đọc nhiều từ

Nếu chúng ta muốn đọc cả dòng "HELLO BOY" thì có thể dùng hai mảng ký tự có kích thước phù hợp

char instr1[10], instr2[10];
scanf("%s %s", instr1,instr2);

Nó sẽ gán chuỗi "HELLO" cho instr1 và "BOY" cho instr2

#include<stdio.h>
#include<string.h>
int main()
{
    char instr[100];
  
    printf("Enter a string\n");
    scanf("%s",bin);
    printf("String is : \n");
    puts(bin);
    
    return 0;
}

Nếu chúng tôi cung cấp "WELCOME TO OPENGENUS" làm đầu vào, nó sẽ chỉ đọc CHÀO MỪNG và hiển thị nó dưới dạng đầu ra

Để khắc phục vấn đề này, chúng ta có thể tạo các mảng khác nhau cho tất cả các từ có trong chuỗi

Đọc nhiều từ để tạo thành một dòng
#include<stdio.h>
#include<string.h>
int main()
{
    char instr1[100],instr2[100],instr3[100],instr4[100];
    
    printf("Enter the string of four words\n");
    scanf("%s",instr1);
    scanf("%s",instr2);
    scanf("%s",instr3);
    scanf("%s",instr4);
    printf("String is : \n");
    
    printf("%s %s %s %s" ,instr1,instr2,instr3,instr4 );
    
    return 0;
}

Nó sẽ lấy bốn từ trong bốn mảng ký tự khác nhau và hiển thị trên màn hình đầu ra

Đọc cả một dòng

Chúng tôi đã thấy rằng scanf với %s hoặc %ws chỉ có thể đọc các chuỗi không có khoảng trắng.
Tuy nhiên, C hỗ trợ một đặc tả định dạng được gọi là mã chuyển đổi bộ chỉnh sửa %[. ] có thể được sử dụng để đọc một dòng chứa nhiều ký tự khác nhau, bao gồm cả khoảng trắng.

char instr[100];
scanf("%[^\n]",instr);

Một phương pháp tương tự như trên

char instr[100];
scanf("%[ ABCDEFGHIJKLMNOPQRSTUVWXYZ]", instr);
Sử dụng getchar

Chúng ta có thể sử dụng nó nhiều lần để đọc các ký tự đơn liên tiếp từ đầu vào và đặt chúng vào một mảng ký tự. Do đó, toàn bộ dòng văn bản có thể được đọc và lưu trữ trong một mảng. Quá trình đọc kết thúc khi ký tự dòng mới ('\n')
được nhập và sau đó ký tự null được chèn vào cuối chuỗi.

#include<stdio.h>
#include<string.h>
main()
{
    char instr[100] , ch;
    int c = 0;
    printf("Enter the line \n");
    do
    {
         ch = getchar();
         instr[c]=ch;
         c++;
    }while(ch != '\n');

    c=c-1;
    instr[c]='\0';
    printf("%s \n", instr);
}
Đọc Toàn bộ Dòng bằng cách sử dụng get()

Một phương pháp khác để đọc chuỗi văn bản chứa khoảng trắng là sử dụng hàm thư viện có sẵn trong
Nó đọc các ký tự từ bàn phím cho đến khi gặp một ký tự dòng mới và sau đó nối một ký tự null vào chuỗi.
Không giống như scanf, nó không bỏ qua khoảng trắng.

Ví dụ

________số 8

Nó sẽ đọc một dòng từ bàn phím và hiển thị nó trên màn hình

Chương trình cuối cùng cũng có thể được viết là

char instr[100];
printf("%s" , gets(line));

Xin lưu ý rằng C không kiểm tra giới hạn mảng, vì vậy hãy cẩn thận không nhập thêm ký tự có thể được lưu trữ trong biến chuỗi được sử dụng

Một chương trình hoàn chỉnh để chứng minh hoạt động của get

HELLO BOY
0

Chương trình này sẽ hoạt động hoàn toàn bình thường và nó sẽ lấy toàn bộ chuỗi làm đầu vào từ bàn phím và hiển thị nó trên màn hình đầu ra

Đọc từng dòng một từ tệp bằng fgets()

Hàm fgets() nhận ba tham số đó là

  1. tên_chuỗi
  2. string_max_size
  3. tiêu chuẩn

Chúng ta có thể viết nó như

HELLO BOY
1

Ví dụ

HELLO BOY
2

Nó sẽ lấy toàn bộ chuỗi làm đầu vào từ bàn phím và hiển thị toàn bộ màn hình trên màn hình đầu ra

Đọc nhiều dòng

Chương trình sau đọc nhiều dòng từ bàn phím

HELLO BOY
3

Câu hỏi

Câu lệnh nhập nào sau đây là đúng để đọc toàn bộ chuỗi từ bàn phím?

Tất cả đều đúng

được (str);

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

fgets(instr,100,stdin);

Tất cả các phương pháp này được thảo luận trong bài viết là gets() , scanf("%[^\n]",str);

Câu hỏi

Một mảng ký tự instr[] lưu trữ "HELLO". Độ dài của mảng instr[] cần để lưu trữ chuỗi hoàn chỉnh là bao nhiêu?

6

5

4

không ai trong số này

Vì từ xin chào dài 5 ký tự và sẽ có một ký tự null ở cuối, chúng tôi yêu cầu một mảng có kích thước 6

Câu hỏi

Trạng thái Đúng hay Sai. "Hàm đầu vào có một tham số chuỗi. "

ĐÚNG VẬY

Sai

Hàm đầu vào có một tham số chuỗi đọc các ký tự từ bàn phím cho đến khi gặp một ký tự dòng mới và sau đó nối một ký tự null vào chuỗi

Vì vậy, với bài viết này tại OpenGenus, chúng ta đã thấy tất cả các phương thức khả thi để lấy chuỗi đầu vào trong ngôn ngữ lập trình C