在C错误中翻译用户输入程序

时间:2015-02-27 07:35:53

标签: c

我正在尝试根据以下规则翻译用户输入的程序:

  1. 如果字符是字母,则必须以大写字母打印。
  2. 如果字符是数字(0-9),则必须打印星号(*)。
  3. 如果字符是双引号(“),则必须打印单引号(')。
  4. 如果字符是反斜杠“\”,则跳过(不打印),打印下一个字符时不做任何修改。
  5. 否则,该字符按原样打印。
  6. mycode的

    #include <stdio.h>
    
    
    void lowertoupper(char lower)
    {
        char upper;
    
        if(lower >= 'a' && lower <= 'z'){
            upper = ('A' + lower - 'a');
        }
        else{
            upper = lower;
        }
    
        printf("%c",upper);  
    }
    
    int main(void) {
        char chara;
        printf("please enter");
    
        while(scanf(" %c", &chara)!= EOF)  {
            if ((chara>='a' && chara<='z')||(chara>='A' && chara<='Z'))
            {
                lowertoupper(chara);
            }
            else if (chara>=0 && chara<=9)
            {
                printf("*");
            }
            else if (chara=='"')
            {
                printf("'");
            }
            else if (chara=="\\")
            {
            }
            else {
                printf("%c",chara);
            }
        }
    }
    

    我的问题

    1. 这不符合预期。我在这里错过了什么条件。
    2. 如何在不使用任何内置功能的情况下满足条件4。

3 个答案:

答案 0 :(得分:1)

int noChange = 0;  /* Added */

while(scanf(" %c", &chara) == 1)  {  /* Modified */
  if(noChange == 1) {    /* Added */
    printf("%c",chara);  /* Added */
    noChange = 0;        /* Added */
  }    /* Added */
  else if ((chara>='a' && chara<='z')||(chara>='A' && chara<='Z'))    /* Modified */
  {
    lowertoupper(chara);
  }
  else if (chara >= '0' && chara <= '9')  /* Modified */
  {
    printf("*");
  }
  else if (chara=='"')
  {
    printf("'");
  }
  else if (chara=='\\')  /* Modified */
  {
    noChange = 1;    /* Added */
  }
  else {
    printf("%c",chara);
  }
}

Working demo here

答案 1 :(得分:1)

这也有效,比较chara存储的ascii值,因此'0'的ascii值不为0.

#include <stdio.h>

int main() {
    char chara = '\0';
    while(scanf("%c", &chara) == 1)  {
        if ( chara>='a' && chara<='z' ) printf("%c",'A' + (chara - 'a'));
        else if (chara >= '0' && chara <= '9') printf("%c",'*');
        else if (chara=='"') printf("%c",'\'');
        else if (chara=='\\') ;
        else printf("%c",chara);
    }
}

答案 2 :(得分:0)

您的数字测试是个问题。数字字符为'0''1',其实际值取决于本地字符集,但绝不会09