【问题标题】:C Convert string to integer using arraysC使用数组将字符串转换为整数
【发布时间】:2016-04-17 12:48:49
【问题描述】:

我正在制作一个程序,用户输入等级(1 到 5),然后将等级添加到数组中以供以后检查。当用户输入字母“s”时,程序关闭。我的程序在运行时崩溃,为什么?

#include <stdio.h>
#include <stdlib.h>

int i;
int grade[50];
char *num[20];

int enter();
int enter()
{
    for (i=0; i<10; i++) {

        printf("\nEnter grade:\nPress [s] to close program\n");
        scanf("%s",&num[i]);
        if (strcmp(num[i],"s") == 0) {
            break;
        } else {
            grade[i] = atoi(num[i]);
        }
    }
}

int main()
{
    enter();

    for (i=0; i<10; i++) {
        printf("\n%d",grade[i]);
    }

    return 0;
}

【问题讨论】:

  • 再次读取 C 中的 char 数组和字符串。
  • 为什么不做整数数组呢?并且您应该初始化数组,因为无论它们是否添加到 enter 方法中,您都会打印 10 个值
  • 如果用户(我们不能信任用户,我们可以吗????)输入“S”或“q”或“exit”怎么办? :-)

标签: c arrays atoi


【解决方案1】:

从 num[20] 声明中删除 ' * ',因为您声明了 20 个字符串指针,因此使用 num[i] 读取和比较值将导致错误。 此外,您只需简单的字符串即可获得成绩。

【讨论】:

  • 删除 '*' 只会导致警告:[警告] 传递 'atoi' 的参数 1 会在没有强制转换的情况下从整数中生成指针
【解决方案2】:

程序崩溃的原因是num是一个指针数组,num的元素不能指向用来存储你输入的字符串的有效内存。 您可以将char *num[10] 更改为char num[10][12] 和'scanf("%s", &num[i])to scanf("%s", num[i]),一切都会好起来的。

当然,你可以使用mallocnum中的每个元素动态分配内存,比如:

`for(i = 0; i < 10; i ++){
     num[i] = (char*)malloc(sizeof(char) * 12);
  }
`

就算想了,也得把scanf("%s", &amp;num[i])改成scanf("%s", num[i]); 最后,你不能忘记释放你刚刚动态malloc的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多