更改字符数组的输出

时间:2015-12-07 21:05:34

标签: c arrays function io unbuffered

我再次发现自己相对迷失并从同龄人那里寻求知识。 我需要做的是编写一个程序,该程序采用一种编码语言,在辅音和输出到英语之后添加“你”。所以输入Hutelutluto将输出为hello。起初我以为我弄清楚了,但后来我的教授说我必须将初始输入存储在一个字符数组中并显示它。然后使用该字符数组输出修改后的翻译。

我尝试了几种不同的角度,一种尝试修改我的readtring函数以适应我的修改参数。它总是变得一团糟,给我意想不到的输出。

基本上我相信我需要帮助将字符数组提供给while循环,但是当我尝试时,我得到一个错误,指出我有一个与整数错误的指针比较。

这是我的代码版本,我相信我最接近解决问题。此时,while独立于readstring函数工作。我确信我正在推翻这个问题,但我不知道如何解决这个问题。 :

/*

Tut language
By: Steven

*/

# include <stdio.h>
void readstring(char *, int);

int main (void){
  char input [50];
  char output;
  char trash;

//initiation
printf("\n\t*Hi! Welcome to the assemble of Tut*\n");
printf("I can help you decode/encode a message to and from the code called Tut!\n");
printf("Enter a sentence to be translated frome Tut - English: ");
readstring(input, 50);
printf("Your Tut sencence is: %s \n",input);








  while (output != '\n') {
    output = getchar();
    if(output == '\n'){//escape sequence
      break;
    }
      if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){
        putchar(output);
        trash = getchar();
        trash = getchar();
      }else{
        putchar(output);
      }
  }
  return 0;
}// end main

//function lists start
void readstring(char * buffer, int size) {
  int x;
  char c = getchar( );

  if( c == '\n' ) {
    c = getchar( );
  }

  for(x = 0 ; (x < (size-1)) && c != '\n' ; x++) {
    buffer[x] = c;
    c = getchar( );
  }

  buffer[x] = '\0';
}

非常感谢任何帮助或反馈! 谢谢你的时间!

P.S。

在考虑了你的建议之后我编辑了我的代码,但似乎它忽略了第一个之后的所有输入。我甚至尝试将!='\ n'条件更改为仅仅i&lt; 50,但我得到了相同的结果。

接受Tim的建议后的代码行:

    for (i = 0; input [i] != '\n'; ++i){
    output = input[i];
      if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){
        putchar(output);
        trash = getchar();
        trash = getchar();
      }else{
        putchar(output);
      }
  }

3 个答案:

答案 0 :(得分:0)

主要问题在于你的while循环。在这个循环中,您正在使用getchar,它尝试从stdin读取。但是,您已经读取了输入,并将其存储在缓冲区中。

所以,你应该从缓冲区获取你的角色,而不是再次阅读它们。

答案 1 :(得分:0)

您的readstring函数已调用getchar来读取用户终端中的字符,因此您无需在readstring完成后再次调用它。相反,使用for循环依次为输入字符串的每个字符设置output

int i;
for i = 0; input[i] != '\n'; ++i {
    output = input[i]
    if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){
        ...

答案 2 :(得分:0)

  

...在一个字符数组中,我不知道我将如何跳过   接下来的两个角色?

通过递增数组索引来跳过字符。变化

        trash = getchar();
        trash = getchar();

        input[++i] && input[++i] || --i;    // step back if at end of string

此外,由于输入字符串由\0而不是\n终止,因此更改

    for (i = 0; input [i] != '\n'; ++i){

    for (i = 0; input[i]; ++i)
    {