如何使用scanf读取值而不知道其类型

时间:2015-02-27 03:52:15

标签: c

我是初学者。我被要求编写一个模块,根据以下规则翻译用户输入:

  • 如果字符是字母,请将其设为大写

  • 如果字符是数字,则改为

  • 如果字符是\,则下一个字符不受影响

程序必须继续调用scanf()来读取用户的字符,直到遇到EOF。注意:你应该在得到字符后立即打印字符。不要试图保存它们。

示例:

input : Hi Mike your room number is \4\2\3 and the passcode is 312
output: HI MIKE YOUR ROOM NUMBER IS 423 AND THE PASSCODE is ***

现在我的问题是:既然你不知道接下来会输入什么类型的角色,你怎么能把它保存在像scanf这样的变量中("%c",& func)将字符保存在func中?另外,我不允许使用toupper(),那么如何才能使字母大写呢?

感谢任何帮助!!谢谢

2 个答案:

答案 0 :(得分:3)

您必须先将其视为字符串(或单个字符)。然后,您可以通过比较其ASCII码来检查某些内容是否为数字:

if(x >= '0' && x <= '9') // digit

与其他条件类似。

答案 1 :(得分:0)

您应该逐个阅读输入字符并相应地解析它 试试这段代码:

#include <stdio.h>

void change();

char ch;

int 
main(void){
    fprintf(stdout, "Input : ");
    for(;;){
        ch = getchar();
        if(ch=='\n')
            break;
        else if(ch=='\\') /* no change */
            ch = getchar();   
        else
            change();
        fprintf(stdout, "%c", ch);
    }
return 0;   
}

void change(){
    if(ch>=97 && ch<=122)   /* small case letters */    
        ch-=32;
    else if(ch>=48 && ch <=57)  /* numbers */    
        ch='*';
}