user-0 提问: 大家帮我看下这程序有什么问题（小程序）

回复:
user: user-1
content: 问题多多，，，，，输入的是非数字字符怎么办

user: user-2
content: 引用 12 楼 super_admi 的回复:没有用处。我最初复制的楼主的代码，改用了system("pause")暂停，忘记删除了……  [quote=引用 11 楼 da___ 的回复:] [quote=引用 3 楼 super_admi 的回复:] 给你玩点花样：   #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() {     int a = 0, b = 0, c = 0;     char* direction[] = {"before", "after"};     scanf("%d",&a);     b = a % 2;     c = b * 2 - 1;     printf("%s: %d, %d, %d\n", direction[b], a + c * 1, a + c * 2, a + c * 3);     system("pause");     return 0; }   第三个头文件对这个程序有什么用处？[/quote][/quote] 自己一想突然也就明白了多谢指导 开拓思维也是不错的

user: user-3
content: 引用 3 楼 super_admi 的回复:给你玩点花样：   #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() {     int a = 0, b = 0, c = 0;     char* direction[] = {"before", "after"};     scanf("%d",&a);     b = a % 2;     c = b * 2 - 1;     printf("%s: %d, %d, %d\n", direction[b], a + c * 1, a + c * 2, a + c * 3);     system("pause");     return 0; }   第三个头文件对这个程序有什么用处？

user: user-4
content: 引用 4 楼 zhao4zhong1 的回复:输入2147483647试试看。   这个不错，溢出搞的爽死

user: user-5
content: 再补充一点：在高中数学，求函数表达式的时候，我们常常用1和-1来控制符号（加或者减）。 其实我这么做，看起来代码简洁，但实际效率，还不如直接用printf，所以我只是说搞点花样，而不是说优化代码。  引用 6 楼 zy_dream 的回复:[quote=引用 3 楼 super_admi 的回复:] 给你玩点花样：   #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() {     int a = 0, b = 0, c = 0;     char* direction[] = {"before", "after"};     scanf("%d",&a);     b = a % 2;     c = b * 2 - 1;     printf("%s: %d, %d, %d\n", direction[b], a + c * 1, a + c * 2, a + c * 3);     system("pause");     return 0; }   如果a是偶数这个程序还可以理解，但是如果是奇数的话，那个c怎么看 还有就是 求得余b怎么就可以在direction里使用，不过说到底还是对char* direction[] = {"before", "after"};不理解[/quote]

user: user-5
content: 貌似我说错了一点：c的分段函数式，是：c(x)= x是偶数，则为-1；x是奇数，则为1.  引用 6 楼 zy_dream 的回复:[quote=引用 3 楼 super_admi 的回复:] 给你玩点花样：   #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() {     int a = 0, b = 0, c = 0;     char* direction[] = {"before", "after"};     scanf("%d",&a);     b = a % 2;     c = b * 2 - 1;     printf("%s: %d, %d, %d\n", direction[b], a + c * 1, a + c * 2, a + c * 3);     system("pause");     return 0; }   如果a是偶数这个程序还可以理解，但是如果是奇数的话，那个c怎么看 还有就是 求得余b怎么就可以在direction里使用，不过说到底还是对char* direction[] = {"before", "after"};不理解[/quote]

user: user-5
content: 其实，b和c只是建立了两个对应关系，如果你能够回想起高中的一些数学知识（分段函数），还是很容易理解的。 b = a%2，其实就是建立这么一个关系：偶数对应0，奇数对应1，你可以用分段函数把它表达出来。 同样，c=b*2-1，建议的关系是：偶数对应1，奇数对应-1，这样可以决定是向前查找数字还是向后查找数字。  引用 6 楼 zy_dream 的回复:[quote=引用 3 楼 super_admi 的回复:] 给你玩点花样：   #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() {     int a = 0, b = 0, c = 0;     char* direction[] = {"before", "after"};     scanf("%d",&a);     b = a % 2;     c = b * 2 - 1;     printf("%s: %d, %d, %d\n", direction[b], a + c * 1, a + c * 2, a + c * 3);     system("pause");     return 0; }   如果a是偶数这个程序还可以理解，但是如果是奇数的话，那个c怎么看 还有就是 求得余b怎么就可以在direction里使用，不过说到底还是对char* direction[] = {"before", "after"};不理解[/quote]

user: user-6
content: 表明人家用的是windows而不是linux

user: user-5
content: 没有用处。我最初复制的楼主的代码，改用了system("pause")暂停，忘记删除了……  引用 11 楼 da___ 的回复:[quote=引用 3 楼 super_admi 的回复:] 给你玩点花样：   #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() {     int a = 0, b = 0, c = 0;     char* direction[] = {"before", "after"};     scanf("%d",&a);     b = a % 2;     c = b * 2 - 1;     printf("%s: %d, %d, %d\n", direction[b], a + c * 1, a + c * 2, a + c * 3);     system("pause");     return 0; }   第三个头文件对这个程序有什么用处？[/quote]

user: user-2
content: 引用 3 楼 super_admi 的回复:给你玩点花样：   #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() {     int a = 0, b = 0, c = 0;     char* direction[] = {"before", "after"};     scanf("%d",&a);     b = a % 2;     c = b * 2 - 1;     printf("%s: %d, %d, %d\n", direction[b], a + c * 1, a + c * 2, a + c * 3);     system("pause");     return 0; }   如果a是偶数这个程序还可以理解，但是如果是奇数的话，那个c怎么看 还有就是 求得余b怎么就可以在direction里使用，不过说到底还是对char* direction[] = {"before", "after"};不理解

user: user-7
content: printf不应该这样用  if (a%2==0)     printf("%d %d %d",a-1,a-2,a-3);    else      printf("%d %d %d",a+1,a+2,a+3);

user: user-6
content: 输入2147483647试试看。

user: user-5
content: 给你玩点花样：   #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() {     int a = 0, b = 0, c = 0;     char* direction[] = {"before", "after"};     scanf("%d",&a);     b = a % 2;     c = b * 2 - 1;     printf("%s: %d, %d, %d\n", direction[b], a + c * 1, a + c * 2, a + c * 3);     system("pause");     return 0; }

user: user-8
content: if和else没加大括号。修改如下： #include <stdio.h>  #include <stdlib.h>  #include <windows.h>  int main()  {  int a;      scanf("%d",&a);      if (a%2==0)      {       printf("%d",a-1);      printf("%d",a-2);      printf("%d",a-3);      }       else      {       printf("%d",a+1);      printf("%d",a+2);      printf("%d",a+3);      }       Sleep(500000);      return 0;   }

user: user-9
content: 差两对大括号吧