C打印符号,然后从文件而不是字符读取

时间:2014-05-27 06:02:06

标签: c

#include<stdio.h>
#include<stdlib.h>

从文件中读取并打印c值

void skaitymas()
{
 FILE *fp = fopen("3.txt","r");
 int c,a;
 while((c=getc(fp))!=EOF)
 {

   if(c != ' ')
   {
   a = a + c; 
   printf("%c ",a);
   if(c == '\n')
   printf("\n");
   }
 }

}

主要

int main()
{
skaitymas();
printf("\n");
system("pause");
}

输入文件

zodis antis plastake zvirblis aksesuaras

kompiuteris pelyte kate afganistanas lietuva

解释

所以我试图从文件中读取单词并将其打印出来,但它会打印符号而不是字符。我想printf("%c",a)是一个问题,我该如何解决?

4 个答案:

答案 0 :(得分:1)

运行它,现在正在工作:

#include <stdio.h>

void skaitymas()
{
 FILE *fp = fopen("3.txt","r");
 char c,a='\0';
 while((c=getc(fp))!=EOF)
 {

   if(c != ' ')
   {
   //a = a + c;
   printf("%c ",c);
   if(c == '\n')
   printf("\n");
   }
 }

}

int main()
{
skaitymas();
printf("\n");
system("pause");
}

答案 1 :(得分:0)

什么是

a = a + c;

这将打印第一个字符正确,但然后在'z'(122)的值中添加'o'(111)的值,并且它继续执行相同的操作,这可能会溢出正常的char限制,因此它会打印符号。

编辑:由于你甚至没有初始化变量'a',它可能包含垃圾值,所以它甚至不会打印第一个字符正确。

答案 2 :(得分:0)

a = a + c是实际的总和ac值,因此它代表整数值。

要连接两个字符,请使用sprintf()。 要么, 将char附加到字符串缓冲区:

char buf[BUF_SIZE]; // string buffer [snip] buf++ = a; // append a char to string buffer and increment buf pointer by 1byte.

答案 3 :(得分:0)

为什么不使用

char a,c; // characters

而不是

int a,c;  // integers

我不明白为什么你用而不是打印c

printf("%c",c);

此外,你循环:

a = a + c;

所以它添加了ascii值并且不连接(在一些循环之后你会很快读取垃圾) (如果你想要连接a和c不能是int或chars,或者它们可以但连接将很困难,你将不得不使用更多变量)