尝试在char数组中的特定索引中打印char

时间:2014-01-04 13:02:24

标签: c arrays char getchar

该程序可以正常分配和重新分配数据。

如果c == -1我想破解,所以我试图将c与“ - ”和数据[i-1] =='1'进行比较,但是我得到了一个错误。所以我试着打印它以查看出现的情况。

   for (i=0;;i++) {
        c=getchar(); /* put input character into c */
        if (c== '1'  ) {               // need to find a way to change it to -1
            printf("n-1 is %c",data[i]); // ask
            break;
            //&& (data[i-1] == '-')
        }

输出

n-1 is ?

*?颠倒了

任何想法。谢谢。

修改

char *getInput()
{

    char *data,*temp;
    data= malloc(sizeof(char));
    char c; /* c is the current character */
    int i; /* i is the counter */
    printf ("\n Enter chars and to finish push new line:\n");
    for (i=0;;i++) {
        c=getchar(); /* put input character into c */
        if (c== '1'  ) {               // need to find a way to change it to -1
            printf("n-1 is %c",data[i]); // ask
            break;
            //&& (data[i-1] == '-')
        }
        data[i]=c; /* put the character into the data array */
        temp= realloc(data,(i+1)*sizeof(char)); /* give the pointer some memory */
        if ( temp != NULL ) {
            data=temp;
        } else {
            free(data);
            printf("Error allocating memory!\n");
            return 0 ;
        }
    }

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你想在输入循环中测试特定输入“-1”。然后,您需要测试两个字符,而不仅仅是1.为了防止数据欠载,首先测试i > 0 - 如果您立即按1,您仍然处于位置# 0,所以你在实际字符串之前测试一些随机内存:

if (i > 0 && c== '1' && data[i-1] == '-')
{
     data[i-1] = 0; /* Terminate string at correct position */
     break;
}

不要忘记调整提示。

元问题:为什么使用'-1'来终止输入,因为Enter是一个更合乎逻辑的选择?

答案 1 :(得分:0)

您之前没有启动数据[]。并且在执行期间,如果第一个输入用户给出的是'1',那么它需要输出一些垃圾。这就是垃圾,倒是'?'

答案 2 :(得分:0)

执行printf时,您没有为data [i]分配任何char。使用以下代码

     if (c== '1' && i>0 ) { 
          printf("n-1 is %c",data[i-1]); 
          break;
     }       

而不是

      if (c== '1'  ) {               // need to find a way to change it to -1
        printf("n-1 is %c",data[i]); // ask
        break;
        //&& (data[i-1] == '-')
      }