2015-09-14 110 views
-4

我基本上应该做的是读取一行输入,例如解析整数并打印出字符

67 5 43 23 

一次添加两个整数,并将它们与它们对应的ASCII码相匹配。所以前两个整数(67 + 5)将对应字母H.我已经能够读取这些行,将它们存储在一个char数组中,但它们都是独立的,即数组中的前三个内容将是6 ,7,和一个空格。所以我用strtok检测空白空间,甚至能够单独打印出来

67 5 43 23 

,但现在我很困惑,我需要做一个新的阵列做任务(如果是这样,怎么能转移内容结束了)还是我过分复杂化自己。

+0

你为什么不把这些数字读作'int'?请在此处添加您的源代码。 – CinCout

+1

如果只用C中的一种方式来**扫描f **格式化的信息而不是像fgetc()那样使用单个字符?我想,如果我要发明这样的东西,我可能会把它称为'scanf()':-) – paxdiablo

+0

也许,但这太明显了。我认为它可能会被称为'strtol',它会包含一个'endptr',允许你转换下一个数字。或者也许更像“atoi”那样神秘吗? –

回答

1

scanf一起阅读数字ints然后显示时,只需将它们投射到charHere就是一个例子。 (您需要对其进行修改以适应您的情况)

0

使用硬编码值的快速和肮脏的解决方案。但它提出了这一点

#include <stdio.h> 

int main() 
{ 
int n, i; 
int new_arr[10], arr[10]; 
n = 4; 
printf("Enter elements\n"); 
for (i=0;i<n;i++){ 
    scanf("%d",&arr[i]); //Or store and retrieve in file as integers 
} 
for (i=0;i<n-1;i++){  
    new_arr[i] = arr[i] + arr[i+1]; 
} 
for (i=0;i<n-1;i++){ 
    printf("%c",new_arr[i]); 
} 


return 0; 
} 
+0

档案阅读部分在哪里? – CinCout

0

就像在C中的一切,通常有几种方法来处理它。将数字流分成单独的数字也不例外。您有两种主要方法:(1)使用格式化的读取,从数据流中一次读取数字,如scanf,或(2)自己将各个字符解析为字符串表示,并调用转换例程,如atoi()strtol

随着scanf,你可以简单的从stdin读取数字,直到输入缓冲区为空:

while (scanf ("%d", &yourvar) == 1) { 
    /* ... do something with yourvar ... */ 
} 

在第二种情况下,你要么一次读一个字符,直到找到一个数字,然后您将保存/读取/保存字符串中的数字,直到遇到space,然后将该字符串转换为数字类型(例如int),使用strtolatoi,处理该数字,然后重复,直到您阅读'\n'EOF

另一种方法是用fgetsgetline将整行一次读入缓冲区,然后您将基本上解析缓冲区,就像您将读取一个字符的数字分开一样。

SO上应该有很多例子。这里是在处理收集2个数字为您和单程一个简单的例子:

#include <stdio.h> 

int main (void) { 

    int idx, n, n1; 
    idx = n = n1 = 0; /* always initialize your variables */ 

    while (scanf ("%d", &n) == 1) 
    { 
     if (idx == 0) { /* check simple 0/1 toggle for n, n1 */ 
      n1 = n; 
      idx = 1; 
     } 
     else {   /* second number, find sum and char */ 
      int sum = n1 + n; 
      if (' ' <= sum && sum <= '~') 
       printf (" sum = (%2d + %2d) = %3d => %c\n", 
         n1, n, sum, sum); 
      else 
       printf (" sum = (%2d + %2d) = %3d => (out of ASCII range)\n", 
         n1, n, sum); 
      idx = 0; 
     } 
    } 

    return 0; 
} 

编译

gcc -Wall -Wextra -o bin/scanf2digitsum scanf_2digitsum.c 

示例使用

$ echo "67 5 43 23" | ./bin/scanf2digitsum 
sum = (67 + 5) = 72 => H 
sum = (43 + 23) = 66 => B 
0

最简单的将是阅读as int

int a, b; 
while (scanf("%d %d", &a, &b) == 2) { // Read two integers every time 
    printf("%c ", a + b);  // Print char corresponding to ASCII value 
} 

这可以无限地运行,仅用于说明目的。您可以提供更好的循环终止条件。