C语言 使用 scanf 进行字符输入,但 do-while 循环不会在空字符处停止



我对编程完全陌生(大学第一学期(,我跟不上我的讲师。目前,我被困在这个练习上(时间比我愿意承认的要长得多(。我试图在互联网上寻求帮助(在这个网站和其他网站上也是如此(,但我不能,因为我们的讲师让我们使用一种非常简单的 c 形式。我不一定要求一个完整的答案。我真的会理解一些关于我错在哪里的提示。我知道这对某些人来说可能很简单,这个问题可能看起来无知或愚蠢,我为没有弄错什么而感到难过,但我需要尝试理解。

所以,我试图做的是使用 scanf 和 do while 循环,以便用户可以在数组中输入字符。但我不明白为什么当用户按 Enter 时循环不会停止。代码还有更多内容,但我正在尝试慢慢地,一步一步地进行。(我不允许使用指针和 getchar 等(。

#include <stdio.h>
main()
{
      char a[50];
      int i;
      printf("Give max 50 charactersn");
      i=0;
      do
      {
            scanf("%c", &a[i]);
            i=i+1;
      }
      while((i<=50) && (a[i-1]!=''));
            for(i=0; i<50; i++)
                 printf("%c", a[i]);
 }

这里没有任何以 nul 结尾的字符串,只有字符串数组。

因此,当按 Enter 时,a[i-1] n(scanf带有 %c 作为参数不会终止字符串,ENTER 只是一个非 NUL 字符,代码为 10 AKA n (

然后不要打印字符串的其余部分,因为你会得到垃圾,只需在打印字符串时重复使用i

#include <stdio.h>
main()
{
      char a[50];
      int i;
      printf("Give max 50 charactersn");
      i=0;
      do
      {
            scanf("%c", &a[i]);
            i=i+1;
      }
      while((i<sizeof(a)) && (a[i-1]!='n'));  // n not 
      int j;
      for(j=0; j<i; j++)  // stop at i
            printf("%c", a[j]);  // output is flushed when n is printed
 }

还要用不i<=50 i<50进行测试,因为a[50]超出了数组边界(我已经推广到sizeof(a)

(

这是您可以执行此操作的另一种方法。

#include <stdio.h>
// define Start
#define ARRAY_SIZE              50
// define End
// Function Prototypes Start
void array_reader(char array[]);
void array_printer(char array[]);
// Function Prototypes End

int main(void) {
    char user_input[ARRAY_SIZE];
    printf("Please enter some characters (50 max)!n");
    array_reader(user_input);
    printf("Here is what you said:n");
    array_printer(user_input);
    return 0;
}

// Scans in characters into an array. Stops scanning if
// 50 characters have been scanned in or if it reads a
// new line.
void array_reader(char array[]) {
    scanf("%c", &array[0]);
    int i = 0;
    while (
           (array[i] != 'n') &&
           (i < ARRAY_SIZE)
          ) {
        i++;
        scanf("%c", &array[i]);
    }
    array[i + 1] = '';
}

// Prints out an array of characters until it reaches
// the null terminator
void array_printer(char array[]) {
    int i = 0;
    while (array[i] != '') {
        printf("%c", array[i]);
        i++;
    }
}

你可以试试这个代码:

#include <stdio.h>
main()
{
  char a[50];
  int i;
  printf("Give max 50 charactersn");
  i=0;
  do {
    scanf("%c", &a[i]);
    i=i+1;
  } while(i<50 && a[i-1] != 'n');
  a[i] = 0;
  for(i=0; a[i] != 0; i++)
    printf("%c", a[i]);
}

函数scanf("%c", pointer)将一次读取一个字符并将其放置在pointer位置。您正在寻找 '' ,这是一个有效的字符串终止符,但是当您按 Enter 时获得的换行符以及您应该查找的换行符是 'n'

此外,通过在末尾添加一个''(实际上是零(来终止您读取的字符串是个好主意。然后使用它停止打印,或者您可以打印未初始化的 char 数组内容的"其余"。

最新更新