我正在处理机器问题,并且负责输入'n'数组,然后我必须“合并排序”。
然而,当我执行并输入单词时,它不会停在'nth'字处,并且即使我使用空终止符也会要求我输入更多字符。 / p>
非常感谢任何帮助。
export LC_ALL=C
答案 0 :(得分:1)
由于输入空字符对于最终用户来说可能很棘手,我建议您更改行以检查其他字符,如转义字符或 ESC 键,其值为27,并且更容易型
while (check != 27 && y < 16)
答案 1 :(得分:0)
您无法通过键盘输入'\0'
个字符,该字符与值0
或0x0
相同。因此,你的循环不会以这种方式终止。
通常,当通过键盘输入时,您将通过按“enter”来终止单个字符串,然后由新行字符'\n'
表示。
您可以进一步增强程序,一旦输入“空”字,即停止扫描单词,即单词的长度为0。
请参阅以下程序,该程序使用fgets
读取字符串,直到下一个新行字符+用于删除新行字符本身的公共代码:
void get_words(int n, char words[][16])
{
for(int x = 0; x < n; x++)
{
if (fgets(words[x],16,stdin)){
words[x][strcspn(words[x],"\n")] = '\0'; // remove new line (if any)
}
else{
words[x][0] = '\0'; // othwise, set it to an empty string
break;
}
if (words[x][0] == '\0') // empty string entered (or end-of-file reached)
break;
}
}
void print_words(int n, char words[][16])
{
for(int x=0; x < n && words[x][0] != '\0'; x++) {
printf("%s\n",words[x]);
}
}
int main()
{
int n;
printf("\n");
printf("Input n: ");
scanf("%d\n", &n);
n += 1;
char words[n][16];
get_words(n, words);
print_words(n, words);
printf("\n");
}
进一步注意,initialize
- 函数不会终止字符串;一旦您访问字符串然后使用printf
。
建议:
void initialize(int n, char words[][16])
{
for (int x=0; x < n; x++)
{
for(int y=0; y < 16; y++)
{
words[x][y] = ' ';
}
words[x][16-1] = '\0';
}
}