刚刚启动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;
}
但我一直在无限循环
谢谢!
答案 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
差异!