C语言程序,想从本地读取“word.txt”中的内容,并逐行显示在显示器上,怎么写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序,想从本地读取“word.txt”中的内容,并逐行显示在显示器上,怎么写?相关的知识,希望对你有一定的参考价值。
下面的代码,可以读取,但是一下全部显示出来了。加一段什么代码?谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
char ch;
FILE *fp;
fp=fopen("/home/lay/Desktop/baby/word/word.txt","r");
if(fp==NULL)
printf("open file word.txt failed!\n");
while(!feof(fp))
ch=fgetc(fp);
putchar(ch);
//sleep(3);
fclose(fp);
return 0;
#include <stdlib.h>
#include <string.h>
int main()
char ch;
char buffer[1024];//缓冲区
int len = 0;
FILE *fp;
fp=fopen("/home/lay/Desktop/baby/word/word.txt","r");
if(fp==NULL)
printf("open file word.txt failed!\\n");
while(!feof(fp))
ch=fgetc(fp);
buffer[len++] = ch;//放到缓冲区
if (ch == '\\n')
buffer[len] = '\\0';
printf ("%s", buffer);
len=0;
sleep(3);
//回车输出
if (len)buffer[len] = '\\0';printf ("%s", buffer);//如果最后没有回车,输出缓冲区内容
fclose(fp);
return 0;
追问
按你说改了,第一遍一下全部显示出来。而且又显示了两遍。如何逐字符显示,而且只显示一遍??
MR. ANDERSON.MAKE A HUMAN BEING IN TO THIS.
Zu�:<v�
R. ANDERSON.MAKE A HUMAN BEING IN TO THIS.
Zu�:<v��R. ANDERSON.MAKE A HUMAN BEING IN TO THIS.
我后来又把代码改了,把putchar(ch)这句不要了,你看看直接复制粘贴能不能好使
追问我就是直接复制的,putchar(ch)这句没有了。你再测试一下代码,帮忙修改一下。谢谢。
追答#include <stdio.h>#include <stdlib.h>
#include <string.h>
int main()
char ch;
char buffer[1024];//缓冲区
int len = 0;
FILE *fp;
fp=fopen("word.txt","r");
if(fp==NULL)
printf("open file word.txt failed!\\n");
while(!feof(fp))
ch=fgetc(fp);
buffer[len++] = ch;//放到缓冲区
if (ch == '\\n')
buffer[len] = '\\0';
printf ("%s", buffer);
len=0;
sleep(3);
//回车输出
if (len)buffer[len] = '\\0';printf ("%s", buffer);//如果最后没有回车,输出缓冲区内容
fclose(fp);
return 0;
我把路径给改了,你自己给改回去吧
468617回答的应该也是对的,睡眠时间需要改小
你原本的代码加上sleep就是逐字符显示啊
参考技术A while(!feof(fp))ch=fgetc(fp);
if ( ch=='\n' )
getchar(); //等待你按一下回车
else
putchar(ch);
参考技术B 你可以一加一个判断,当遇到‘\n'时 sleep()就可以了
if(ch == '\n') sleep(200);追问
你回答的也是对的,可以做到逐行显示。如何做到逐字符显示啊?我再提一个问题,你回答一下,我给你采纳一下。
追答是不是逐字显示还要加上音效。。。。
参考技术C 把 这个循环while(!feof(fp))
ch=fgetc(fp);
putchar(ch);
//sleep(3);
改为
fgets(str,199,fp);
while(!feof(fp))
printf("%s",str);
fgets(str,199,fp);
//sleep(3);
试试。
其中str为长度为200的字符数组( char str[20]; )
无法将条件结果附加到新列表
我对Python或任何编程语言都很陌生。
以供参考:
- 分配
- 我的守则
- 题
1.)我的课程的分配是这样的:从文本文件'word.txt'中读取并将第一个文本文件中符合条件的单词写入新的文本文件。例如,如果函数是getListEnd('s','word.txt','word1.txt'),并且标准是ofile中的单词必须以字符's'结尾,那么我的ifile word.txt = [苹果,胡萝卜,奶酪,芥末,问题]将被分类为一个单词word1.txt = [苹果,胡萝卜,问题]
2.)这是我的代码:
mf1 = open("/Users/XXXX/word.txt", "r")
mf2 = open("/Users/XXXX/word2.txt", "w+")
mylist1=[] #list for storing word.txt strings
mylist2=[] #list for storing sorted strings
def sort(c): #function for sorting mylist1 for
for i in mylist1: criteria into my list2
if c==i[-1]:
mylist2.append(i)
def getListEnd(c, ifile, ofile):
for s in mf1: #loop for appending word.txt to list 1
mylist1.append(s)
print(len(mylist1)) #check if mylist1 contains word.txt
sort(c) #append sorted words to list2
with open('word2.txt', 'w+') as mf2: #write into word1.txt list2
for listitem in mylist2:
mf2.write('%s
' % listitem)
getListEnd('s', 'word.txt', 'word2.txt')
3.)所以问题是:为什么每当我尝试追加到mylist2时,排序的单词都没有发生?也就是说,当我检查mylist2的长度时,即使word.txt文件中有很多以s结尾的单词,它也会显示为0。我知道检查myList1时出现的错误是以最后一个字母's结尾的字符,但我不知道是什么,我无法将其附加到mylist2。
您的计划有两个问题:
- 在对输入进行排序之前,您正在写入输出文件
- 您在字符串中包含换行符,因此当您比较实际比较换行符的最后一个字符时。
这是您的程序,其中包含有关更改的注释:
# mf1 = open("word.txt", "r") # Don't do this here. You read it in in your with block anyway.
# mf2 = open("word2.txt", "w+"). # Don't do this here. You write it in your with block anyway
mylist1=[]
mylist2=[]
def sort(c):
for i in mylist1:
if c==i[-1]:
mylist2.append(i)
def getListEnd(c, ifile):
with open(ifile, "r") as mf1:
for s in mf1: # the strings will still contain the newlines if read this way
# so when you check the end of the string you'll actually be comparing
# a newline character.
if "
" in s:
mylist1.append(s[:-1]) # if there's a newline character,
# don't include it when appending to the list
else:
mylist1.append(s)
print("mylist length: ", len(mylist1))
print("mylist1: ", mylist1)
sort(c)
getListEnd('s', 'word.txt') # you don't need to pass it any info about the output file
print("mylist2: ", mylist2)
## Your writing block has to come after you've sorted it! Not before
with open('word2.txt', 'w+') as mf2:
for listitem in mylist2:
mf2.write('%s
' % listitem)
More generally:
要创建仅包含以字母“s”结尾的项目的列表,您只需执行以下操作:
input_list = ['apples', 'carrot', 'johns', 'list']
output = [i for i in input_list if "s" == i[-1]]
print(output)
>> ['apples', 'johns']
线output = [i for i in input_list if "s" == i[-1]
用input_list
迭代你的i
列表并检查每个项目以查看每个字符串i[-1]
的最后一个字符是否是字符's'
。然后它返回一个列表,其中包含与条件匹配的所有项目。一种更具表现力的编码方式是:
for word in input_list:
if word[-1] == "s":
output.append(word)
通过读取和写入文件,在with
操作符中使用python更安全,因为它可以确保您没有未关闭的文件/更安全范围。
A simpler version:
这是我认为你想做的玩具程序:
with open("word.txt", "r") as f:
mylist1 = f.read().split("
") # splits the input file around newlines
mylist2 = [i for i in mylist1 if "s" == i[-1]]
with open("word2.txt", "w") as f:
for word in mylist2:
f.write(f"{word}
") # writes word into the file
如果word.txt是:
john
apples
carrots
lewis
然后word2.txt变成:
apples
carrots
lewis
这是一个例子:
with open('words1.txt', 'w') as f_object:
f_object.write("Apples" + "
")
f_object.write("Rubles" + "
")
f_object.write("Nope" + "
")
f_object.write("Nah" + "
")
f_object.write("Georges" + "
")
f_object.close()
print("Done")
with open('words1.txt', 'r') as f:
lines = f.readlines()
with open('words2.txt', 'w') as f_ob:
for line in lines:
line = line.rstrip()
if line[-1] == 's':
f_ob.write(line + '
')
print("Done")
我们可以简单地指出,如果单词以's'结尾,我们将把它添加到新的.txt文件中。例如,当我们遍历每一行时,我们可以获取字符串中的最后一个索引。 “if”该行的最后一个索引等于s,那么我们显然可以将该行写入该文件。如果不是,它将跳过。 words2.txt文件中的输出将是:
Apples
Rubles
Georges
从带有for x in file
循环的文件中读取行会在每行的末尾为您提供换行符。
因此,i[-1]
是换行符,而不是单词的最后一个字母。
以上是关于C语言程序,想从本地读取“word.txt”中的内容,并逐行显示在显示器上,怎么写?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 dos 命令的输出读取/重定向到 C/C++ 中的程序变量?