c - c中for循环问题中的特殊字符读取

标签 c for-loop gcc char

我的情况是我需要输入一些字符,并且在读取特定字符(这里是 *)后我需要跳出循环。

代码:

void main()
{
    int i=0,temp=0;
    char a[100];
    printf("Enter the array\n");

    for(i=0;a[i]!='*';i++)
    {
        scanf("%c",&a[i]); 
    }
}

即使我输入“*”字符,它也不会跳出循环。

我更改了如下所示的代码,它可以正常工作。

void main()
{
    int i=0,temp=0;
    char a[100];

    printf("Enter the array\n");

    for(i=0;;i++)
    {
       scanf("%c",&a[i]);
       if(a[i]=='*')
           break;
    }
}

第一个代码有什么问题? 我正在使用 gcc 编译器。

最佳答案

void main()
{
  int i=0,temp=0;
  char a[100];
  printf("Enter the array\n");

  for(i=0;a[i]!='*';i++)
  {
    scanf("%c",&a[i]); 
  }
}

测试 a[i]!='*' 不是使用与此语句中使用的相同的 i 值执行的

  scanf("%c",&a[i]); 

在扫描和测试之间,i 递增。

顺序是:

  1. i设置为0
  2. 如果 i 不再小于 100 则退出循环
  3. 针对*测试a[0]
  4. 扫描进a[0]
  5. 增加 i
  6. 如果 i 不再小于 100 则退出循环
  7. 针对*测试a[1]
  8. 扫描进a[1]
  9. 增加 i
  10. 如果 i 不再小于 100 则退出循环
  11. 等等...

从上面您还了解到,代码会在 分配任何值之前测试 a 的元素。这样做会引发臭名昭著的未定义行为,这是一件坏事,因为从这一刻起任何都可能发生。

关于c - c中for循环问题中的特殊字符读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45263075/

相关文章:

Python C 模块 - Malloc 在特定版本的 Python 中失败

java - 这段代码有什么问题,无法编译?

java - 循环内的递归方法

c - 怀疑 'gdb' 下的尾部优化代码

c++ - 在 Rcpp 包中加载共享对象

c - C : increment/decrement va_arg? 中的参数列表

c - 有没有一种标准的方法来使用 Unicode 字符串文件路径进行 fopen?

c - (如何)我可以从套接字描述符中找到套接字类型吗?

java - 有没有办法在 Java 中进行 n 级嵌套循环?

gcc - 静态库中目标文件的顺序