使用C中的2D数组将小写转换为大写

时间:2017-06-11 05:54:48

标签: c arrays multidimensional-array uppercase lowercase

这里我想使用2D数组将一些学生名称转换为大写。这编译没有错误,但在执行时它会产生一个称为“分段错误”的错误。我尝试使用一维数组,但它只打印我输入的姓氏。最后,我想分别计算输入名称的总整数值。我是C语言的新手,所以可能会有很多错误。有什么想法来修复我的代码?

#include<stdio.h>

#define SIZE 6

void input(char arr[][10], int size);
void upper(char arr[][10], int size);
void findIntValue(char arr[][10], int size);

int main(void)
{
  char arr[SIZE][10] = {0.0};

  input(arr, SIZE);

  upper(arr, SIZE);

  findIntValue(arr, SIZE);

  return 0;
}

 void input(char arr[][10], int size)
{
  int i, j;

  for(i = 0 ; i < size ; i++)
 {
    printf("\nEnter the name: ");
    scanf(" %s", arr[i]);
 }
}

void upper(char arr[][10], int size)
{
  int i, j;

  for(i = 0 ; i < size && arr[i] != '\0' ; i++)
 {
    for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
    {
        if(arr[i][j] >= 97 && arr[i][j] <= 122)
        {
            arr[i][j] -= 32;
        }
    }
 }

 for(i = 0; i < size && arr[i] != '\0' ; i++)
 {
    for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
    {
        printf("\n%s\n", arr);
    }
 }
}

void findIntValue(char arr[][10], int size)
{
  int i, j;
  int total = 0;

  for(i = 0 ; i < size && arr[i] != '\0' ; i++)
 {
    for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
    {
        total += arr[i][j];

        printf("\n%s\t%d\n", arr, total);

        total = 0;
    }
  }
}

enter image description here

2 个答案:

答案 0 :(得分:0)

你正在以错误的方式使用2-d。您需要在arr[i]中提供scanf()。因为您的数组是一个二维数组,其中arr[i]能够存储字符串。所以你的输入fn将包含这个语句。输出函数scanf("%s",arr[i])相同。 希望这会有所帮助:)

答案 1 :(得分:0)

您的代码中存在许多问题。

问题-1:在函数输入中,需要将arr [i]作为输入传递给scanf

问题-2:在上层函数中,在第一个循环中,您试图读取未初始化的j值,这可能导致未定义的行为。

问题-3:在上部函数中,在第二个循环中,在printf中你再次使用arr,而你应该使用arr [i]而且,你不需要两个循环来打印。一个循环就足够了。

问题-4:findIntValue的循环和打印逻辑错误。在内循环完成后,您需要打印total和arr。此外,打印值应为arr [i]而不是arr。

请在下面找到更正的程序:

#include<stdio.h>

#define SIZE 6

void input(char arr[][10], int size);
void upper(char arr[][10], int size);
void findIntValue(char arr[][10], int size);

int main(void)
{
  char arr[SIZE][10] = {0.0};

  input(arr, SIZE);

  upper(arr, SIZE);

  findIntValue(arr, SIZE);

  return 0;
}

 void input(char arr[][10], int size)
{
  int i, j;

  for(i = 0 ; i < size ; i++)
 {
    printf("\nEnter the name: ");
    scanf(" %s", arr[i]);
 }
}

void upper(char arr[][10], int size)
{
  int i, j;

  for(i = 0 ; i < size && arr[i][0] != '\0' ; i++)
 {
    for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
    {
        if(arr[i][j] >= 97 && arr[i][j] <= 122)
        {
            arr[i][j] -= 32;
        }
    }
 }

 for(i = 0; i < size && arr[i][0] != '\0' ; i++)
 {
        printf("\n%s\n", arr[i]);
 }
}

void findIntValue(char arr[][10], int size)
{
  int i, j;
  int total = 0;

  for(i = 0 ; i < size && arr[i][0] != '\0' ; i++)
 {
    for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
    {
        total += arr[i][j];
    }
        printf("\n%s\t%d\n", arr[i], total);
        total = 0;
  }
}
相关问题