Vòng lặp while đọc tệp C++

Vòng lặp là một trong những cấu trúc cơ bản và mạnh mẽ nhất trong điện toán, bởi vì nó cho phép chúng ta lặp lại một tập hợp các lệnh, bao nhiêu lần tùy ý, trên một danh sách các mục mà chúng ta chọn. Phần lớn tư duy máy tính liên quan đến việc thực hiện một nhiệm vụ và giải quyết nó theo cách có thể được áp dụng lặp đi lặp lại cho tất cả các nhiệm vụ tương tự khác và vòng lặp for là cách chúng ta khiến máy tính thực hiện công việc lặp đi lặp lại đó

for item in $items
do
  task $item
done

Không giống như hầu hết các đoạn mã mà chúng ta đã viết ở dấu nhắc tương tác, vòng lặp for không thực thi ngay khi chúng ta nhấn Enter

user@host:~$ for item in $items

Chúng ta có thể viết bao nhiêu lệnh tùy thích trong khối giữa các từ khóa

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
3 và
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done

Chỉ cho đến khi chúng tôi đạt đến

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4 và nhấn Enter, vòng lặp for mới thực hiện công việc của nó

Điều này về cơ bản khác với lệnh và phản hồi từng dòng mà chúng tôi đã trải nghiệm cho đến nay tại dấu nhắc. Và nó báo trước cách chúng ta sẽ lập trình thêm về. ít nhấn mạnh hơn vào việc thực thi các lệnh với từng dòng và nhấn mạnh hơn vào việc lập kế hoạch cho chức năng của chương trình, sau đó thực hiện nó sau

Cú pháp cơ bản

Cú pháp của vòng lặp

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 có thể gây nhầm lẫn, vì vậy đây là một số ví dụ cơ bản để chuẩn bị/làm mới sự hiểu biết của bạn về chúng

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done

Đây là một phiên bản phức tạp hơn sử dụng các biến

________số 8

Có thể sử dụng thay thế lệnh để tạo các mục mà vòng lặp

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 lặp qua

user@host:~$ for item in $items
0

Nếu bạn cần đọc danh sách các dòng từ một tệp và hoàn toàn chắc chắn rằng không có dòng nào chứa khoảng trắng trong đó

user@host:~$ for item in $items
1

Vòng lặp đọc-trong khi là một biến thể của vòng lặp trên, nhưng an toàn hơn khi đọc các dòng từ tệp

user@host:~$ for item in $items
2

Xây dựng vòng lặp for cơ bản

Hãy bắt đầu lại từ đầu, với một vòng lặp

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 rất tối thiểu, sau đó xây dựng nó thành một thứ phức tạp hơn, để giúp chúng ta hiểu được mục đích của chúng

Vòng lặp đơn giản nhất

Điều này đơn giản như bạn có thể tạo một vòng lặp for

user@host:~$ for item in $items
4

Điều đó có vẻ khá vô giá trị? . Tôi đã viết bốn dòng mã để làm những gì cần một dòng để làm,

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
9

Các yếu tố khác trong bộ sưu tập

Thật khó để nói, nhưng một "vòng lặp" đã thực hiện. Nó chỉ thực hiện một lần. OK, vậy làm thế nào để chúng ta làm cho nó thực thi nhiều hơn một lần? . Hãy thêm bốn

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
1 nữa

user@host:~$ for item in $items
8

OK, không thú vị lắm, nhưng chương trình dường như ít nhất là lặp lại. bốn

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
1 dẫn đến bốn lệnh
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
3 được thực thi

Điều gì xảy ra khi chúng ta thay thế bốn số

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
1 đó bằng các số khác nhau?

user@host:~$ for item in $items
0

Và…không có gì. Vì vậy, vòng lặp không tự động thực hiện bất kỳ điều gì cụ thể đối với tập hợp các giá trị mà chúng tôi đã cung cấp cho nó. Dù sao thì vẫn chưa

Tham khảo biến vòng lặp

Hãy nhìn sang bên trái của từ khóa

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
0, và tại đó
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
6. Điểm của
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
6 đó là gì? . Vì vậy, có lẽ nó là một biến?

user@host:~$ for item in $items
1

Chơi lô tô. Đây gần như là hoạt động cơ bản của vòng lặp

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6. - Nhận tập hợp các mục/giá trị (
for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
1) - Chuyển chúng vào cấu trúc vòng lặp
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 - Sử dụng biến vòng lặp (
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
6) làm trình giữ chỗ, viết các lệnh giữa khối
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
3/
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4. - Khi vòng lặp thực thi, biến vòng lặp,
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
6, nhận giá trị của từng mục trong danh sách –
for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
7,
for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
8,
for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
9,
user@host:~$ for item in $items
00, – và khối lệnh giữa
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
3 và
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4 sau đó được thực thi. Trình tự này lặp lại một lần cho mọi mục trong danh sách

Khối

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
3/
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4 có thể chứa bất kỳ chuỗi lệnh nào, thậm chí là một vòng lặp
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 khác

user@host:~$ for item in $items
2____13

Vòng lặp trong vòng lặp là một cấu trúc phổ biến trong lập trình. Phần lớn, tôi sẽ cố gắng tránh gán các vấn đề liên quan đến loại logic này, vì có thể khó gỡ xoắn trong quá trình gỡ lỗi

Đọc tệp, từng dòng một, đáng tin cậy với tính năng đọc trong khi

Bởi vì

user@host:~$ for item in $items
06 in một tệp theo từng dòng, vòng lặp for sau đây có vẻ hợp lý

user@host:~$ for item in $items
4

Tuy nhiên, việc thay thế lệnh sẽ khiến

user@host:~$ for item in $items
06 chia các từ theo khoảng trắng. Nếu
user@host:~$ for item in $items
08 chứa những điều sau đây

user@host:~$ for item in $items
5

Đầu ra của vòng lặp

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 sẽ là thế này

user@host:~$ for item in $items
6

Vòng lặp đọc-trong khi sẽ giữ nguyên các từ trong một dòng

user@host:~$ for item in $items
7

Chúng ta cũng có thể chuyển từ kết quả của một lệnh bằng cách đặt nó trong

user@host:~$ for item in $items
10 và
user@host:~$ for item in $items
11

user@host:~$ for item in $items
8

Ống và vòng

Nếu bạn đến từ các ngôn ngữ khác, các luồng dữ liệu có thể không quen thuộc với bạn. Ít nhất chúng là đối với tôi, vì cú pháp làm việc với chúng trong Bash trực tiếp và đơn giản hơn nhiều so với trong Ruby hoặc Python

Tuy nhiên, nếu bạn chưa quen với lập trình bằng bất kỳ ngôn ngữ nào, điều có thể không rõ ràng là cách làm việc với các luồng dữ liệu khác với làm việc với các vòng lặp

Ví dụ, đoạn mã sau

user@host:~$ for item in $items
9

– tạo ra cùng một đầu ra như vòng lặp này

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
0

Và tùy thuộc vào mô hình tinh thần của bạn về mọi thứ, có vẻ như trong cả hai ví dụ, mỗi từ, e. g.

user@host:~$ for item in $items
12,
user@host:~$ for item in $items
13, được chuyển qua quá trình dịch mã (thông qua
user@host:~$ for item in $items
14) và sau đó được lặp lại

Ống và bộ lọc

Không đi sâu vào các nguyên tắc cơ bản của hệ thống Unix, trong đó một đường ống hoạt động về cơ bản khác với một vòng lặp ở đây, hãy để tôi đề xuất một cách giải quyết tinh thần

Các chương trình dẫn từ thiết bị xuất chuẩn và thiết bị xuất chuẩn thường có thể được sắp xếp dưới dạng bộ lọc, trong đó luồng dữ liệu đi vào chương trình và xuất hiện ở định dạng khác

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
1

Đối với các tác vụ không chỉ chuyển đổi dữ liệu, từ bộ lọc này sang bộ lọc khác, hãy nghĩ đến việc sử dụng vòng lặp. Một nhiệm vụ như vậy có thể là gì?

Làm cách nào để đọc tệp bằng vòng lặp while trong C?

int fgetc(FILE *ptr); Cách tiếp cận. Chương trình này đọc toàn bộ nội dung của tệp, sử dụng chức năng này bằng cách đọc từng ký tự một. Vòng lặp Do-While sẽ được sử dụng để đọc ký tự cho đến khi nó chạm đến cuối tệp.

Làm cách nào để đọc từ tệp văn bản trong C?

Để đọc hoặc ghi vào các tệp văn bản đơn giản, cần thực hiện ba bước. .
Mở tệp bằng fopen
Đọc từ tệp bằng fscanf hoặc ghi vào tệp bằng fprintf
Đóng tệp bằng fclose

Làm cách nào để đọc một dòng từ một tệp trong C?

Để đọc từ một tệp văn bản trong C, bạn cần phải mở một luồng tệp bằng hàm fopen(). Khi một luồng tệp đã được mở, bạn có thể đọc từng dòng tệp bằng hàm fgets() .

Làm thế nào để đọc và ghi tệp trong C?

Để đọc và ghi vào tệp văn bản, chúng tôi sử dụng các hàm fprintf() và fscanf() . Chúng chỉ là phiên bản tệp của printf() và scanf(). Sự khác biệt duy nhất là fprintf() và fscanf() mong đợi một con trỏ tới cấu trúc FILE.