C:scanf chars into array

时间:2014-08-26 10:32:52

标签: c arrays char

刚刚启动C并想知道如何在数组中输入未知数量的char, 当完成符号为'〜'

#include <stdio.h>
#define N (499)

int main()
{
    int count;
    int i;
    char input;
    char text[N];


    printf("Text:\n");
    scanf("%c", &input);

    while (input != '~')
    {
        for(i = 0; i < N; i++)
        {
            text[i] = input;
            scanf("%c", &input);
            count++;
        }
    }

return 0;
}

但我一直在无限循环

谢谢!

3 个答案:

答案 0 :(得分:3)

删除while循环并将for循环替换为:

 for(i = 0; i < N && input != '~'; i++)

最好使用终止空字符完成字符串,以便程序知道字符串结束的位置。 所以在for循环之后添加:

 text[i] = '\0';

或者,您可以使用一些scanf正则表达式来完全避免循环。 例如:

        scanf("%498[^~]", text);

将读取数组文本中的498个字符,直到符合~符号。它还会将终止字符放在字符串中。

(通常不应该使用scanf,但这对初学者来说已经足够了)

编辑:感谢一些随机的家伙,“amis”或smth(请告诉你的名字)更换错误。

答案 1 :(得分:0)

你有2个循环。如果没有经过第一个(因为你得到的字符少于N),当你测试输入时,你永远不会回到第一个字符。 更重要的是,你读的最后一个字符通常是\ n,所以你不会在第一个循环级别得到一个〜

答案 2 :(得分:0)

如果您使用count进行计数,请先将其初始化为零。

int count = 0;

您在for循环内使用while循环,对于每个字符输入,for循环将运行N次。因此请检查input != '~'循环中的for,删除while循环。

请尝试此操作 -

,而不是循环方法
    for(i = 0; i < N && input != '~'; i++)
    {
        text[i] = input;
        scanf(" %c", &input); // Note the space before ' %c'
        count++;
    }
    text[i]='\0'; // To make the last byte as null.

如果你在循环中使用它,你需要在%c之前给一个空格,否则你只能读取用户的N / 2输入!

这是由输入字符后的\n引起的。输入后输入\n后输入为下一个输入,以避免在%c之前给出空格!

输出(%c之前没有空格) -

root@sathish1:~/My Docs/Programs# ./a.out 
Text:
q
w
e
r
t
y
~
Count = 12

输出(%c之前的空格) -

root@sathish1:~/My Docs/Programs# ./a.out 
Text:
q
w
e
r
t
y
~
Count = 6

请注意count差异!