在while循环中使用scanf作为char数组

时间:2015-08-23 00:32:29

标签: c

我是C编程新手。 我好奇地看到我学到了多少C. 因此我想到创建一个程序,我可以在其中创建一个文件并在其中写入。 我想,该文件的名称应少于100个字符。但是,如果它是一个字符串或一个单词或一个字母并不重要。 我无法完成,因为我被困在了如何输入文件名的字符串(例如,Project work,New Doc1等)

所以我写了这个;

int main()
{

    int a = 0;

    while(a != 5)
    {
        puts("Put a number: ");
        scanf("%i", &a);
        if(a == 1)
        {
            char name[30];
            printf("Put a name: ->>");
            for(int i = 0;i < 31 && name[i] != '\n';i++)
            {
                name[i] = getchar();

            }
            char ex[50] = ".txt";

            strcat(name,ex);
            printf("%s",name);

        }
    }

    return 0;
}

问题是在输入名称时,它不会在下一次停止时(当我按下输入时)以及一些如何不打印正确的文件名。

2 个答案:

答案 0 :(得分:1)

你的方法存在很多问题。

  1. 将scanf与其他输入原语混合起来并不好,你必须从剩余的任何字符中清除标准输入。
  2. 任何字符串必须以'\ 0'结尾才能将该字符串标记为完整。所以你必须为这个角色预留空间。
  3. 当你结束时,你必须遵守字符串的限制。
  4. 如果你使用printf,那么字符串只会在刷新标准输出后显示(当你把'\ n'放在字符串的末尾,就完成了冲洗)
  5. 试试这个:

    #include <stdio.h>
    #include <string.h>   
    
    int main()
    {
    
        int a = 0;
    
        while(a != 5)
        {
            int ch;
            puts("Put a number: ");
            scanf("%d", &a);
            /* flush any remaining characters */
            while ((ch=getchar()) != EOF && ch != '\n'); /* issue 1 */
            if(a == 1)
            {
                int i = 0;
                char name[30];
                printf("Put a name: ->>");
                fflush(stdout); /* issue 4 */
    
                while ((ch=getchar()) != EOF && ch != '\n' && i < 25) /* issue 3 */
                    name[i++] = ch;
                name[i] = '\0'; /* issue 2 */
    
                /* flush any remaining characters [if input > 25 chars] */
                if (ch != EOF && ch != '\n') while ((ch=getchar()) != EOF && ch != '\n');
    
                char ex[50] = ".txt";
    
                strcat(name,ex); /* issue 3 */
                printf("%s\n",name);
    
            }
        }
    
        return 0;
    }
    

    此外,请考虑使用getlineatoi代替getcharscanf

答案 1 :(得分:0)

#include<stdio.h>
main()
{
    static char stop_char='y';
    char input=0;
    do{
        printf("please input a character\n");
        scanf("\n%c",&input);
    }while(input!=stop_char);
}